4

私はJavaにかなり慣れていませんが、これは他の言語と同じように機能すると思いました。

文字列の場合:

String line = "3::Daniel::Louis||##2::Leon: the Professional::1994||6::Jean::Reno||7::Gary::Oldman||8::Natalie::Portman||##3::Scarface::1983||9::Al::Pacino||10::Michelle::Pfeiffer";

ごとに分割したい||##

しかし:

for(String s : line.split("||##")) {
    System.out.println("|"+s+"|");
 }

戻り値:

||
|3|
|:|
|:|
|D|
|a|
|n|
|i|

...など

私は期待していました:

3::Daniel::Louis

Leon: the Professional

...など

私は何を間違っていますか?

4

7 に答える 7

13

あなたは脱出する必要があります| 論理ORの正規表現メタ文字であるため文字

だから私は使用します

line.split("\\|\\|##"))

スラッシュもエスケープする必要があることに注意してください。それが私が使用する理由です。

\\|

それ以外の

\|

そのメタ文字をエスケープするには

于 2012-09-11T17:37:09.400 に答える
2
public String[] split(String regex) 
于 2012-09-11T17:39:42.543 に答える
1

次のようなものが欲しいようです:

Pattern p = Pattern.compile("\\|\\|##", Pattern.LITERAL)  
String[] result = p.split(myString)  

区切り文字に複数の文字を含めることができ、出力文字列から区切り文字を除外できることを知っています。

上記の例があなたのシナリオで正確に機能するかどうかはわかりません。少し実験する必要があるかもしれません (たとえば、正規表現の「メタ文字」を「\」で「エスケープ」します)。

Pattern.compile の Javadoc は次のとおりです。

Java 正規表現構文の詳細は次のとおりです。

于 2012-09-11T17:39:32.623 に答える
0

この場合、Gilbertoのソリューションは問題なく機能しますが、guavaを確認することをお勧めします。文字列スプリッターを含む非常に便利なユーティリティクラスがたくさんあります。それであなたは書くことができます:

Iterable<String> frags = Splitter.on("||##").split(line);
// Do whatever with the iterable...maybe you just want a list?
// List<String> fragList = Lists.newArrayList(frags);
于 2012-09-11T17:58:08.630 に答える
0

バーをエスケープする必要があります:|正規表現の特殊文字です。

使用する:

for(String s : line.split("\\|\\|##")) {

\Q\Eまたは、パターン全体を文字通り使用するように強制することもできます。

for(String s : line.split("\\Q||##\\E")) {

これはおそらく、から取得するパターンと同じですPattern.quote

|正規表現でオプションのパターンを指定できます。正規表現は、、|##または:なしまたは##と同等です。これは、空の文字列の周囲、または入力内のすべての文字間で分割されます。

については、 javadocを参照してくださいPattern

于 2012-09-11T17:37:27.180 に答える
0

あなたはあなたの|キャラクターを脱出する必要があります:

for (String s : line.split("\\|\\|##"))
于 2012-09-11T17:37:30.377 に答える
0

「|」をエスケープする必要があります このように \|

于 2012-09-11T17:37:43.403 に答える