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

标签 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'

我可以通过在空格上分割字符串,然后合并一系列字符串(如“b、cc、dd、e”)来返回“b cc dd e”,但我想要一种更好的方法,可能使用一些正则表达式。

最佳答案

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

尝试使用这个:

  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;
}

关于java - 分割空格分隔的字符串,忽略单引号内的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55769384/

相关文章:

java - 为什么我必须输入两次数据?

Python - 正则表达式查找所有重复模式,后跟可变长度的字符

java - Java 中的字符串标记化(大文本)

java - 有返回类型但没有 return 语句的函数正在编译。为什么?

java - Java Servlet 和 SSE 中的连接关闭

java - 运行 RCP 产品文件时不生成日志文件

Python re.sub 问题

regex - 使用 Perl 正则表达式匹配字符串的一部分

python - 如何用Python逐句解析文件

regex - 使用正则表达式(括号)进行标记