2017-04-09 7 views
-2

私は、次の文字列をコンマ、二重引用符、byとwordで分割するパターンをJavaで構築しようとしています。例えばキーワードを使用して文字列を分割する正規表現

入力文字列:私はなりたい

String str = "\"java and c++\" and ruby , are languages"; 

として:

["java and c++", 
ruby, 
are languages] 

入力文字列:

文字列str = "\" JavaとC++ \ "と\"ルビー\ "と言語です";

は私がなりたいよう:

["java and c++", 
"ruby", 
are languages] 

入力文字列:

文字列str = "JavaやC++、\" ルビー\ "と言語です"。

私はその結果たい:私は、単一のパターンは、すべての結果を達成したい

[java and c++, 
"ruby", 
are languages] 

。事前

おかげ

答えて

0

あなたがこの方法を使用することができます。

String str = "\"java and c++\" and ruby , are languages"; 
str = str.replaceAll("and(?=[^\"\"]*\")", "#"); 

List<String> result = new ArrayList<>(); 
for (String s : str.split("and|,")) { 
    result.add(s.replaceAll("#", "and")); 
} 
System.out.println(result); 

考え方は次のとおりです。

  1. 終了し、その後にand#を交換and,str.split("and|,")
  2. str.replaceAll("and(?=[^\"\"]*\")", "#")
  3. スプリットと引用符".. and .."を交換してください。

これが印刷されます:あなたは"java and c++"によって分割し、その結果でそれを維持したいと(デフォルトでは、区切り文字が結果に含まれません)

["java and c++" , ruby , are languages] 
0

、あなたはそれでlookaheadを含める必要が、および例えば、第二の区切り文字としてコンマを使用する:

String str = "\"java and c++\" and ruby , are languages"; 

String quote = Pattern.quote("\"java and c++\""); 

String[] split = str.split("((?<=" + quote + ")|,)"); 

System.out.println(split.length); 
System.out.println(Arrays.toString(split)); 

これが結果に"java and c++"と一致し、それを含むであろう(先読みの結果として)、それはまた,に一致しますが、incのません結果でそれをルードにする。

関連する問題