سؤال

ولدي مشكلة مزعجة بدلا أنني حلها باستخدام أسلوب عودي بسيط في جاوة. ومع ذلك، وأنا أبحث عن طريقة أفضل للقيام بذلك.

وشملت مشكلة الأولية وجود بيضاء داخل ونقلت للطباعة / ترميز Base64 مايم رأس - والتي كما قرأت RFC 2047 مواصفات - غير مسموح به. وهذا يعني أن فشل فك لرأس MIME عندما بيضاء موجودة، منها مثلا.

=?iso-8859-1?Q?H=E4 ll and nothing?=

وأو أكثر وثيق الصلة:

=?iso-8859-1?Q?H=E4 ll?= preserve this text =?iso-8859-1?Q?mo nk ey?=

والهدف هو فقط إزالة المسافات بين =؟ ؟ = حدود (أو إعادة ترميز باستخدام = 20). نص آخر خارج هذا يجب الحفاظ عليها.

وأنا أبحث عن النهج البديلة في حل هذه اللغة هدفي لهذا هو جافا. أي أفكار على أبسط نهج أنظف لهذا؟

هل كانت مفيدة؟

المحلول

هل يمكن بناء جهاز الدولة بسيطة لتتبع إذا كنت بين =؟ و؟ =، ثم قراءة شار المدخلات التي كتبها شار، وإخراجه من شار شار تحويل الفراغات عند الحاجة ...

نصائح أخرى

http://java.sun.com/docs/ كتب / تعليمي / أساسي / التعابير المنطقية / .

\ ق = بيضاء
\ S = غير مسافة بيضاء
\؟ = السؤال هرب علامة
. = كل الحروف، على غرار * في أضعف مطابقة النمط.

قد يكون أسهل للقيام متعددة الأجزاء بحث واستبدال باستخدام شيء من هذا القبيل: سحب هذا الجزء:؟.؟ = \ \ =

وعلى الصعيد العالمي استبدال \ الصورة في هذا الجزء مع سلسلة فارغة.

ووضع الجزء الخلفي.

وكنت قد تكون قادرة على الحصول عليه وصولا الى بحث واحد واستبدالها إذا كنت تلعب مع التعبير المعتاد لفترة طويلة بما فيه الكفاية ...

حسنا، أنا لا أعرف عن أفضل، ولكن هنا هذا النهج البديل:

    public static void main( String[] args )
    {
        String ex1 = "=?iso-8859-1?Q?H=E4 ll?= " + 
            "preserve this text =?iso-8859-1?Q?mo nk ey?=";
        String res1 = removeSpaces( ex1 );

        System.out.println( ex1 );
        System.out.println();
        System.out.println( res1 );
    }

    public static String removeSpaces( String str )
    {
        StringBuffer result = new StringBuffer();
        String strPattern = "(\\?.+\\?)";
        Pattern p = Pattern.compile( strPattern );
        Matcher m = p.matcher( str );

        if ( !m.find() || m.groupCount() == 0 )
        { // Contains no matching sequence.
            return str;
        }

        for ( int i = 1; i <= m.groupCount(); i++ )
        {
            m.appendReplacement( result, 
                m.group( i ).replaceAll( "\\s", "" ) );
        }

        return result.toString();
    }

هل يمكن تقسيم سلسلة على؟، ثم وضعها معا مرة أخرى، بالتناوب بين استبدال المساحات ولا.

وتحرير: عذرا. غاب عن علامات المساواة. سيتم تصحيح.

وتحرير 2: تصحيح تنفيذ (مشتقة من مثال جافادوك لMatcher.appendReplacement ()):

String input = "=?iso-8859-1?Q?H=E4 ll?= what about in this case? :) =?iso-8859-1?Q?mo nk ey?=";

Pattern p = Pattern.compile("=\\?(.*?)\\?=");
Matcher m = p.matcher(input);
StringBuffer sb = new StringBuffer();
while (m.find()) {
    m.appendReplacement(sb, m.group().replaceAll(" ", ""));
}
m.appendTail(sb);
System.out.println(sb.toString());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top