4

JavaでSplit関数を使用して文字列を分割しようとしています

String empName="employee name | employee Email";
String[] empDetails=empName.split("|");

それは私に結果を与える

empDetails[0]="e";
empDetails[1]="m";
empDetails[2]="p";
empDetails[3]="l";
empDetails[4]="o";
empDetails[5]="y";
empDetails[6]="e";
empDetails[7]="e";
.
.
.

しかし、次のコードを試してみると

String empName="employee name - employee Email";
String[] empDetails=empName.split("-");

それは私に与えます

 empDetails[0]="employee name ";
 empDetails[1]=" employee Email";

Java分割関数が「|」で区切られた文字列を分割できない理由

4

4 に答える 4

13

String#split()regexメソッドは ではなくを受け入れますString

はメタ文字であるため| 、正規表現では特別な意味を持ちます。

それを回避するときに機能します。

String[] empDetails=empName.split("\\|");

アップデート:

java:OFFICIAL DOCS での特殊文字の処理

補足として:

Javaメソッド名は小文字で始まります.大文字と小文字ではありsplit()ませんSplit()..s

于 2013-09-18T06:54:57.450 に答える
5

しかし、私の質問は、「|」の場合にエスケープを使用する必要がある理由です。「-」ではなく

"|"は正規表現のメタ文字であるためです。それは「交代」を意味します。eg"A|B"は一致"A"またはを意味し"B"ます。PatternJava 正規表現の理解に問題がある場合は、Java 正規表現の完全な構文について説明している javadocs を参照してください。

したがって、(エスケープせずに) 分割するとき"|"は、セパレーターが「無か無か」であり、それがターゲット文字列の各文字間で一致することを指定しています。

(記録のために"-"、メタ文字でもありますが、"[..]"文字グループのみです。他のコンテキストでは、エスケープは必要ありません。)

于 2013-09-18T07:00:43.567 に答える
3

.split("\\|");代わりに使用する必要があります.split("|");

于 2013-09-18T06:56:56.470 に答える
1

試す

String[] empDetails=empName.split("\\|");
于 2013-09-18T06:56:04.547 に答える