我有一个String str,它由几个由单个空格分隔的单词组成。
如果我想创建一个字符串集或列表,我可以简单地调用str.split(" ")
,我会得到我想要的。
现在,假设str稍微复杂一些,例如它就像:
str = "hello bonjour \"good morning\" buongiorno";
在这种情况下,我希望保留" "
之间的内容,以便我的字符串列表为:
hello
bonjour
good morning
buongiorno
显然,如果我在这种情况下使用了split(" ")
,那么它就不会工作,因为我会得到
hello
bonjour
"good
morning"
buongiorno
那么,我如何得到我想要的东西?
答案 0 :(得分:3)
您可以创建一个正则表达式,用于查找“”之间的每个单词或单词:
\w+|(\"\w+(\s\w+)*\")
并使用Pattern和Matcher类搜索它们。
离。
String searchedStr = "";
Pattern pattern = Pattern.compile("\\w+|(\\\"\\w+(\\s\\w+)*\\\")");
Matcher matcher = pattern.matcher(searchedStr);
while(matcher.find()){
String word = matcher.group();
}
编辑:适用于“”中的每个字数。 XD忘记了
答案 1 :(得分:2)
您可以执行以下操作。首先使用" \""分割Sting。然后使用空格"分割其余的。 " 。偶数代币将是引号""。
之间的代币public static void main(String args[]) {
String str = "hello bonjour \"good morning\" buongiorno";
System.out.println(str);
String[] parts = str.split("\"");
List<String> myList = new ArrayList<String>();
int i = 1;
for(String partStr : parts) {
if(i%2 == 0){
myList.add(partStr);
}
else {
myList.addAll(Arrays.asList(partStr.trim().split(" ")));
}
i++;
}
System.out.println("MyList : " + myList);
}
,输出
hello bonjour "good morning" buongiorno
MyList : [hello, bonjour, good morning, buongiorno]
答案 2 :(得分:1)
您可以使用正则表达式找到解决方案,但我要做的只是手动编写字符串断路器。
List<String> splitButKeepQuotes(String s, char splitter) {
ArrayList<String> list = new ArrayList<String>();
boolean inQuotes = false;
int startOfWord = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == splitter && !inQuotes && i != startOfWord) {
list.add(s.substring(startOfWord, i));
startOfWord = i + 1;
}
if (s.charAt(i) == "\"") {
inQuotes = !inQuotes;
}
}
return list;
}