【问题标题】:Using String.split to split with multiple conditions使用 String.split 拆分多个条件
【发布时间】:2014-04-05 20:08:45
【问题描述】:

所以我有以下字符串:

deptid = 33 AND location = 'NewYork'

基本上我正在尝试将其解析为令牌。我一直在使用 Split.string 并按空格分隔,这适用于我需要的所有内容,但是在某些情况下字符串可能是:

deptid = 33 AND location = '纽约'

我需要保持引号之间的所有内容。有没有一种方法可以使用 String.split 来拆分它,它会按空格拆分所有内容,除非遇到引号它会给我引号之间所有内容的标记?

编辑: 很抱歉没有早点澄清!但我想要那句话中的每一件事。我想要 deptid,=,33,AND,位置,=,纽约。 AND 语句不会一直存在。可能只是

location = '纽约'

【问题讨论】:

  • 拆分样本后会得到什么?
  • 我正在尝试将其存储到 String[] 令牌中。所以我希望tokens[0] 是33,tokens[1] 是“纽约”。我一直按空格分隔,所以结果是 tokens[0] = 33 tokens[1] = New tokens[2] = York,这不是我想要的
  • 那么,您是否尝试收集= 之后的单词,除非该单词被引用然后引号需要被删除?
  • 我真的很抱歉我没有说清楚我想要什么(解决我的问题)。我实际上想要那个句子的每个单词,但如果它周围有引号,我想要整个单词。所以在示例中我想要 deptid, =, 33, AND, location, =, New York

标签: java regex parsing split


【解决方案1】:

您的评论:

我正在尝试将其存储到 String[] 令牌中。所以我希望 token[0] 是 33,tokens[1] 是“纽约”。

试试这个

    String s = "deptid = 33 AND location = 'New York'";

    int index = 0;

    String[] arr = s.split("AND");
    String[] tokens = new String[arr.length];

    for (String str : arr) {
        tokens[index++] = str.split("=")[1].trim();
    }

    for (String token : tokens) {
        System.out.println(token);
    }

输出:

33
'New York'

【讨论】:

  • 我犯了一个错误,描述了我想要的东西很糟糕。否则这也是正确的答案
【解决方案2】:

你需要比 String.split 更强大的东西,使用 Patterns:

String myString = "deptid = 33 AND location = 'New York'";
List<String> tokens = new LinkedList<>();

Pattern tokenPattern = Pattern.compile("'[^']*'|[^ ]+");
Matcher matcher = tokenPattern.matcher(myString);
while(matcher.find()) {
    tokens.add(matcher.group());
}

System.out.println(tokens);

【讨论】:

  • 这正是我想要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多