java - 使用分隔符拆分带引号的字符串

标签 java string split

我想用分隔符空格分割一个字符串。但它应该智能地处理带引号的字符串。例如。对于像

这样的字符串
"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'

可以在此处查看上面使用的示例的正则表达式分解:

http://regex101.com/r/wM6yT9


话虽如此,正则表达式不应该成为解决所有问题的解决方案 - 我只是在找乐子。这个例子有很多边缘情况,例如处理 unicode 字符、符号等。您最好使用经过验证的真实库来完成此类任务。在使用这个答案之前先看看其他答案。

关于java - 使用分隔符拆分带引号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10695143/

相关文章:

java - 在浏览器中突出显示和编辑 XML

java - Opera Webdriver 不工作

c - C中字符串比较(strcmp)的问题

c# - 替换大文本文件中的长列表单词

java - 在java中解析字符串以获取信息

javascript - 字符串到数组 - 拆分返回 NaN 值 | JavaScript

java - 如何转义Java属性文件中的双列?

java - 使用 Jackson 重命名对象中的字段

java - 用逗号拆分字符串,但忽略括号或引号中的逗号

java - 如何将数字字符串拆分为 int 数组?