web-dev-qa-db-ja.com

split( "|")を使用してJavaの文字列をパイプ記号で分割する

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<

なんでこんなことが起こっているの?

182
bluehallu

あなたが必要

test.split("\\|");

splitは正規表現を使用し、regex|OR演算子を表すメタキャラクターです。 \を使用してその文字をエスケープする必要があります("\\"は文字列リテラルのメタキャラクターでもあり、エスケープするには別の\が必要なので、\としてStringで記述されます)。

使用することもできます

test.split(Pattern.quote("|"));

そして、Pattern.quote|を表す正規表現のエスケープバージョンを作成させます。

404
Jigar Joshi

適切なエスケープを使用します。string.split("\\|")

あるいはヘルパー Pattern.quote() これはまさにこの目的のために作られました:

string.split(Pattern.quote("|"))

これは任意の入力文字列で動作します。ユーザー入力を引用/エスケープする必要があるときに非常に役立ちます。

30
Aaron Digulla

このコードを使用してください:

public static void main(String[] args) {
    String test = "A|B|C||D";

    String[] result = test.split("\\|");

    for (String s : result) {
        System.out.println(">" + s + "<");
    }
}
4
berliandi

Apacheライブラリを使用してこれを実行することもできます。

StringUtils.split(test, "|");
2
Simon

.split("[|]")を使うこともできます。

(私は.split("\\|")の代わりにこれを使用しましたが、これは私にとってはうまくいきませんでした。)

1
Homerzz
test.split("\\|",999);

limitまたはmaxを指定すると、次のような例では正確になります。 "boo ||| a "or" || boo | "または "|||"

しかし、test.split("\\|");は同じ例に対して異なる長さの文字列配列を返します。

参照を使用します。 link

0
Ryan Augustine