0

わかりました。これは重複した投稿だと言うかもしれませんが、違います。

私は、ユーザーが指定したある種の区切り文字の削除に取り組んでいるプログラムに取り組んでいます。区切り文字が1文字(特殊かどうか)のみの場合、私のプログラムは機能しています。ただし、ユーザー入力が文字列の場合は、メッセージ文字列から区切り文字のすべての文字が削除されます。

元。文字列メッセージ="ab\ nc [d] e {fMardk1g(h)i} j"; 出力は:bcefghijになりますが、期待される出力はabcdefghijです。

私はPatternクラスを初めて使用するので、問題がどこにあるのかわかりません。

問題のコードは次のとおりです(問題を特定できるように、テストクラスに入れました)。

import java.util.regex.Pattern;

public class ParsingTest {
    public static void main(String[] args) {
        String[] delimiters = { "Mardk1", "\n", "[", "]", "{", "}", "(", ")" };  
        StringBuilder regexp = new StringBuilder("");  
        regexp.append("[");  
        for(String s : delimiters) {  
            regexp.append("[");  
            regexp.append(Pattern.quote(s));  
            regexp.append("]");  
        }  
        regexp.append("]");  

        String message = "ab\nc[d]e{fMardk1g(h)i}j";  
        StringBuilder result = new StringBuilder("");  
        String[] a = message.split(regexp.toString());  
        for(String string : a) {  
            result.append(string);
        }
        System.out.println(result);
        for(String str: a) System.out.print(str);
        System.out.println();
    }
}
4

1 に答える 1

1

間違った種類のグループ化構造を使用しています。[xyz]のような、任意の1文字のx、y、またはzに一致するパターンを作成しています。いくつかの完全な文字列のいずれかに一致させたいので、通常の()スタイルのグループ化と交互演算子(|)が必要です。詳細については、Patternドキュメントをご覧ください。

代わりにこれを試して、正規表現を作成してください。

for(String s : delimiters) {
    // We don't want to start with (|
    if (regexp.length() > 1)
    {
        regexp.append("|");
    }
    regexp.append(Pattern.quote(s));  
}  
于 2011-07-30T15:27:31.703 に答える