我想用分隔符空格分割一个字符串。但它应该智能地处理带引号的字符串。例如。对于像
这样的字符串"John Smith" Ted Barry
它应该返回三个字符串 John Smith、Ted 和 Barry。
最佳答案
在弄乱它之后,您可以为此使用 Regex。在以下位置运行等效的“全部匹配”:
((?<=("))[\w ]*(?=("(\s|$))))|((?<!")\w+(?!"))
Java 示例:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Test
{
public static void main(String[] args)
{
String someString = "\"Multiple quote test\" not in quotes \"inside quote\" \"A work in progress\"";
Pattern p = Pattern.compile("((?<=(\"))[\\w ]*(?=(\"(\\s|$))))|((?<!\")\\w+(?!\"))");
Matcher m = p.matcher(someString);
while(m.find()) {
System.out.println("'" + m.group() + "'");
}
}
}
输出:
'Multiple quote test'
'not'
'in'
'quotes'
'inside quote'
'A work in progress'
可以在此处查看上面使用的示例的正则表达式分解:
话虽如此,正则表达式不应该成为解决所有问题的解决方案 - 我只是在找乐子。这个例子有很多边缘情况,例如处理 unicode 字符、符号等。您最好使用经过验证的真实库来完成此类任务。在使用这个答案之前先看看其他答案。
关于java - 使用分隔符拆分带引号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10695143/