0

文字列内の特殊文字をエスケープし、エスケープされた文字列からエスケープ文字を削除するために、次のロジックを試しました。

public static void main(String a[])
{
    String keyword = "otterbox 3500 series { { waterproof case \\(clear) phones";
    System.out.println("INut keyword is   "+keyword);
    StringBuilder sb = new StringBuilder();
     // * and ? is not included as they are wild card
    for (int i = 0; i < keyword.length(); i++){
        char c = keyword.charAt(i);
        if (c == '\\' || c == '!' || c == '(' || c == ')' || c == '&' ||
                c == ':'  || c == '^' || c == '[' || c == ']' ||
                c == '-'  || c == '{' || c == '}' || 
                c == '~'){
            sb.append('\\');
        }
        sb.append(c);
    }
    keyword=sb.toString();

    System.out.println("Escaped keyword is    "+keyword);





    if(keyword.contains("\\")){
        int l=0;
        int l2=0;
        for (int i = 0; i < keyword.length(); i++){         
            char c = keyword.charAt(i);
            if(c=='\\')l++;
            if (c == '!' || c == '(' || c == ')' || c == '&' ||
                    c == ':'  || c == '^' || c == '[' || c == ']' || c=='-'||
                    c == '{'  || c == '}' || c == '~' || c=='(' || c== ')'){
                keyword = keyword.replaceAll("\\\\\\"+c, ""+c);
                l2++;               
            }
        }       

        if(l==1) keyword= keyword.replaceAll("\\\\", "");
        if(l>1 && l2==1) keyword = keyword.replaceFirst("\\\\", "");
    }

    System.out.println("Final    "+keyword);


}

文字列に\を使用したかったので、最後のキーワードはotterbox 3500シリーズ{{防水ケース\(クリア)電話)になると思います。ただし、出力は「Final otterbox 3500 series {{waterproof case \ \(clear)phones」として表示されます。私はここで何が欠けていますか?

4

1 に答える 1

1

正規表現はどうですか?

String keyword = "e!s { { wat(erpr)o}o^f ca]se \\c(lear) pho][nes &: hee-l~o";
String escaped = keyword.replaceAll("([{}()\\[\\]\\\\!&:^~-])", "\\\\$1");
String unescaped = escaped.replaceAll("\\\\([{}()\\[\\]\\\\!&:^~-])", "$1");
System.out.println(keyword);
System.out.println(escaped);
System.out.println(unescaped);

プリント:

e!s { { wat(erpr)o}o^f ca]se \c(lear) pho][nes &: hee-l~o
e\!s \{ \{ wat\(erpr\)o\}o\^f ca\]se \\c\(lear\) pho\]\[nes \&\: hee\-l\~o
e!s { { wat(erpr)o}o^f ca]se \c(lear) pho][nes &: hee-l~o
于 2012-10-25T12:17:44.620 に答える