15

以下では、出力が[]そうではないのはなぜ[1]ですか?

String input="1|2|3";
String[] values= input.split("|");
System.out.println("[" + values[0] + "]");
// Output: []

ただし、セパレータを変更すると、出力はになり[1]ます。

String input="1;2;3";
String[] values= input.split(";");
System.out.println("[" + values[0] + "]");
// Output: [1]
4

6 に答える 6

24

その文字をエスケープしてみてください:

String input="1|2|3";
String[] values= input.split("\\|");
System.out.println("[" + values[0] + "]");
于 2013-03-05T14:11:16.560 に答える
15

|は正規表現で特別な意味を持つためです。次のようにエスケープする必要があり\|ます。Java では、バックスラッシュもエスケープする必要があるため、最終的には\\|

パイプ文字は分離演算子です。つまり、正規表現エンジンにその左右のパターンを選択するように指示します。あなたの場合、何にでも一致する空の文字列があります。

于 2013-03-05T14:11:26.967 に答える
6

このsplitメソッドは、正規表現をパラメーターとして受け取ります。パイプは、独自の目的を持つ予約文字です (意味しますor)。

エスケープ ( "\\|") するか、Java 1.5+ を使用している場合は次Pattern.quote("|")のように使用できます。

input.split(Pattern.quote("|"));
于 2013-03-05T14:14:33.787 に答える
4

分割するときはエスケープする必要があるので、\\|代わりに使用してみてください。|

したがって、コードは次のように変更されます。

String input="1|2|3";
String[] values= input.split("\\|");
System.out.println("[" + values[0] + "]");
于 2013-03-05T14:11:41.747 に答える
3

文字「|」をエスケープする必要があります ちゃんと

String input="1|2|3";
        String[] values= input.split("\\|");
        System.out.println("[" + values[0] + "]");
于 2013-03-05T14:13:43.017 に答える
-2

パイプ文字は、正規表現の論理またはと同等です。本当にパイプ文字をセパレーターとして使用したい場合は、\as in でエスケープする必要があります

String[] values= input.split("\|");

于 2013-03-05T14:14:32.377 に答える