web-dev-qa-db-ja.com

パイプ文字( "|")で文字列を分割する

この文字列から値を分割することはできません。

"Food 1 | Service 3 | Atmosphere 3 | Value for money 1 "

これが私の現在のコードです:

String rat_values = "Food 1 | Service 3 | Atmosphere 3 | Value for money 1 ";
String[] value_split = rat_values.split("|");

出力

[、F、o、o、d、、1、、、、S、e、r、v、i、c、e、、3、、、、A、t、m、o、s、p、 h、e、r、e、、3、、、、V、a、l、u、e、、f、o、r、、m、o、n、e、y、、1、]

期待される出力

食べ物1
サービス3
雰囲気3
お金の価値1

194
Giridharan

|は正規表現のメタキャラクタです。あなたはそれを脱出する必要があるでしょう:

String[] value_split = rat_values.split("\\|");
441
devnull

Pattern.quote()を使う

String[] value_split = rat_values.split(Pattern.quote("|"));

//System.out.println(Arrays.toString(rat_values.split(Pattern.quote("|")))); //(FOR GETTING OUTPUT)

エスケープ文字の使用(メタ文字用)

String[] value_split = rat_values.split("\\|");
//System.out.println(Arrays.toString(rat_values.split("\\|"))); //(FOR GETTING OUTPUT)

StringTokenizerの使用(正規表現の問題を回避するため)

public static String[] splitUsingTokenizer(String Subject, String Delimiters) 
{
     StringTokenizer StrTkn = new StringTokenizer(Subject, Delimiters);
     ArrayList<String> ArrLis = new ArrayList<String>(Subject.length());
     while(StrTkn.hasMoreTokens())
     {
       ArrLis.add(StrTkn.nextToken());
     }
     return ArrLis.toArray(new String[0]);
}

パターンクラスの使用(Java.util.regex.Pattern)

Arrays.asList(Pattern.compile("\\|").split(rat_values))
//System.out.println(Arrays.asList(Pattern.compile("\\|").split(rat_values))); //(FOR GETTING OUTPUT)

出力

[Food 1 ,  Service 3 ,  Atmosphere 3 ,  Value for money 1 ]
70
Prateek

または.. Pattern#quote

String[] value_split = rat_values.split(Pattern.quote("|"));

これは、 String#split正規表現を受け入れるために発生します。

|は正規表現で 特別な意味を持ちます

quote正規表現の文字列表現を返します。

17
Maroun
String rat_values = "Food 1 | Service 3 | Atmosphere 3 | Value for money 1 ";
    String[] value_split = rat_values.split("\\|");
    for (String string : value_split) {

        System.out.println(string);

    }
2
Kick