3

私はJavaを使用して次の形式の文字列を分割しています:

String stringToSplit = "AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK";

使っています

String[] tokens = stringToParse.split("\\s");

空白に沿って文字列を分割し、次のようにします。

tokens = {"AAA","BBB","CCC", "DDD","EEE","FFF","GGG","HHH","III", "JJJ", "KKK"} 

私が今やらなければならないことは、それらのほとんどの空白に沿って分割されますが、特定の場合にはいくつかの文字列を一緒に保ちます。たとえば、「CCCDDD」と「IIIJJJ KKK」は、分割したときに完全な文字列のままにしておきたいと思います。したがって、トークンの配列は次のようになります。

tokens = {"AAA","BBB","CCC DDD","EEE","FFF","GGG","HHH","III JJJ KKK"}

どの正規表現を使用しますか?これは可能ですか?

4

2 に答える 2

6

ccc ddd を ccc_ddd に置き換え、後でアンダースコアをスペースに戻すことができます。

この種のことをたくさん行うつもりなら、ある種の構文パーサーに投資したくなるかもしれません。

于 2013-01-15T20:13:53.520 に答える
3

を使用する代わりに、split()連続する非空白文字をすべて検索する次の方法を使用できますが、代替を使用して、空白を含む特定のターゲット文字列にも一致させます。

Pattern p = Pattern.compile("CCC DDD|III JJJ KKK|\\S+");
Matcher m = p.matcher("AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK");
while(m.find()) {
    System.out.println(m.group());
}

例: http://ideone.com/AxI1CV

于 2013-01-15T20:19:44.983 に答える