分割由空格分隔的字符串,忽略单引号内的空格

时间:2019-04-20 01:10:12

标签: java regex tokenize single-quotes

我的Java输入String str = "aa 2 xx 'b cc dd e' -o se '4-5'"

除了单引号内的空格,我想输出由空格分隔的标记。 因此,输出应为:

aa
2
xx
'b cc dd e'
-o
se
'4-5'

我可以通过在空白处分割String,然后合并诸如'b,cc,dd,e之类的字符串序列来取回'b cc dd e'来做到这一点,但我想有一个更好的方法,可能使用一些正则表达式。

1 个答案:

答案 0 :(得分:0)

我认为您可以通过迭代字符串并使用布尔值检测引号来做到这一点。

尝试使用:

  public List<String> test(String a){
    final List<String> list = new ArrayList<>();
    boolean quotes = false;
    StringBuilder sb = new StringBuilder();
    for(char c: a.toCharArray()){
        if(quotes){
            if('\'' == c) {
                quotes = false;
                if(!sb.toString().isEmpty()) {
                    list.add(sb.toString());
                }
                sb = new StringBuilder();
            } else {
                sb.append(c);
            }
        }else {
            if (' ' == c) {
                if (!sb.toString().isEmpty()) {
                    list.add(sb.toString());
                    sb = new StringBuilder();
                }
            } else if ('\'' == c) {
                quotes = true;//entra na string do quote

            } else{
                sb.append(c);
            }
        }
    }

    if(!sb.toString().isEmpty()){
        list.add(sb.toString());
    }
    return list;
}