我一直试图在Java中构建一个模式,用逗号,双引号和单词分隔后面的字符串。
例如:
输入字符串:
String str = "\"java and c++\" and ruby , are languages";
我想要结果为:
["java and c++",
ruby,
are languages]
输入字符串:
String str =" \" java和c ++ \"和\"红宝石\"并且是语言&#34 ;;
我想要结果为:
["java and c++",
"ruby",
are languages]
输入字符串:
String str =" java和c ++,\" ruby \"并且是语言&#34 ;;
我想要结果为:
[java and c++,
"ruby",
are languages]
我想要单一模式来实现所有结果。
提前致谢
答案 0 :(得分: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);
这个想法是:
".. and .."
替换为str.replaceAll("and(?=[^\"\"]*\")", "#")
and
和,
str.split("and|,")
#
替换为and
,然后结束。这将打印:
["java and c++" , ruby , are languages]
答案 1 :(得分: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++"
这将匹配,
并将其包含在结果中(作为前瞻的结果)它也会匹配NSLocalizedStringWithDefaultValue
但不会将其包含在结果中。