0

分割したい文字列 s があるので、各部分は「|」で区切られます symbol は文字列配列の要素になります。

これは私がそうする方法ですか?

     String s = "FirstName1 LastName1|FirstName2 LastName2|FirstName3 LastName4|";
     String [] names = s.split("|");

次に、これらの要素を ArrayList に追加します。私は次のことをしました

      for(int i = 0; i < names.length; i++)
        {
            friendsNames.add(names[i]);
        }

しかし、私の ArrayList は次のように読み取ります。

  Element 1: F
  Element 2: I
  Element 3: R
  Element 4: S
  Element 5: T
  Element 6: 
  Element 7: N

どこが間違っているのかについての提案はありますか? 等

4

3 に答える 3

7

「|」をエスケープする必要があります 正規表現の世界では特殊文字であるためです。

String [] names = s.split("\\|");

なぜ 2 つの "\" ?

正規表現では、「|」をエスケープします。「\|」で。ただし、「\」は Java のエスケープ文字であるため、正規表現の「\」を保持するにはエスケープする必要があります。

于 2012-06-11T23:44:00.567 に答える
1

パイプは、split メソッドで受け入れられる正規表現の特殊文字です。したがって、区切り文字として解釈されるように、その文字をエスケープする必要があります。

import static java.util.Arrays.asList;
//...
String s = "FirstName1 LastName1|FirstName2 LastName2|FirstName3 LastName4|";
List<String> items = asList(s.split("\\|"));
于 2012-06-11T23:47:12.347 に答える
0

デリミタで正規表現を表現したくない場合は、Pattern.quote()メソッドを使用して、デリミタに含まれるすべての特殊文字をエスケープします。

String[] items = s.split(Pattern.quote("|"));

パイプ文字|は、正規表現の代替を示します。したがって、分割仕様は、「空の文字列または空の文字列で分割する」ことを意味します。すべての文字の間に空の文字列があるため、すべての文字が分割されます。

パイプなどの特殊な正規表現文字は、 で「エスケープ」できます\。これにより、特殊文字として無効になり、|代わりに入力の文字と一致します。

さらに複雑なことに、は Java 文字および文字列リテラルで特別な意味を持つため、別の文字\を使用してエスケープする必要もあります。\これは、完全に区切り文字が であることを意味します"\\|"

于 2012-06-11T23:46:58.740 に答える