使用String.split分割多个条件

时间:2014-04-05 20:08:46

标签: java regex parsing split

所以我有以下字符串:

  

deptid = 33 AND location ='NewYork'

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

  

deptid = 33 AND location ='New York'

我需要保持引号之间的所有内容。有没有办法我可以使用String.split来分割它,它会以空格分割所有东西,除非它遇到引号时它会给出引号之间所有内容的标记?

编辑: 很抱歉没有提前澄清!但我想要那句话中的每件事。我想要deptid,=,33,AND,location,=,纽约。 AND语句并不总是存在。它可能只是

  

location ='纽约'

2 个答案:

答案 0 :(得分:3)

您的评论:

  

我正在尝试将其存储到String []标记中。所以我希望令牌[0]为33,令牌[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'

答案 1 :(得分: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);