Javaの公式文書には、次のように記載されています。
たとえば、文字列"boo:and:foo"
は、これらの式Regex Resultを使用して以下の結果をもたらします。
{ "boo", "and", "foo" }"
そしてそれが私が働くために必要な方法です。しかし、私はこれを実行すると:
public static void main(String[] args){
String test = "A|B|C||D";
String[] result = test.split("|");
for(String s : result){
System.out.println(">"+s+"<");
}
}
それは印刷されます:
><
>A<
>|<
>B<
>|<
>C<
>|<
>|<
>D<
これは私が期待することとはかけ離れています。
>A<
>B<
>C<
><
>D<
なんでこんなことが起こっているの?
あなたが必要
test.split("\\|");
split
は正規表現を使用し、regex|
はOR
演算子を表すメタキャラクターです。 \
を使用してその文字をエスケープする必要があります("\\"
は文字列リテラルのメタキャラクターでもあり、エスケープするには別の\
が必要なので、\
としてStringで記述されます)。
使用することもできます
test.split(Pattern.quote("|"));
そして、Pattern.quote
に|
を表す正規表現のエスケープバージョンを作成させます。
適切なエスケープを使用します。string.split("\\|")
あるいはヘルパー Pattern.quote()
これはまさにこの目的のために作られました:
string.split(Pattern.quote("|"))
これは任意の入力文字列で動作します。ユーザー入力を引用/エスケープする必要があるときに非常に役立ちます。
このコードを使用してください:
public static void main(String[] args) {
String test = "A|B|C||D";
String[] result = test.split("\\|");
for (String s : result) {
System.out.println(">" + s + "<");
}
}
Apacheライブラリを使用してこれを実行することもできます。
StringUtils.split(test, "|");
.split("[|]")
を使うこともできます。
(私は.split("\\|")
の代わりにこれを使用しましたが、これは私にとってはうまくいきませんでした。)
test.split("\\|",999);
limitまたはmaxを指定すると、次のような例では正確になります。 "boo ||| a "or" || boo | "または "|||"
しかし、test.split("\\|");
は同じ例に対して異なる長さの文字列配列を返します。
参照を使用します。 link