/ / Usando String.split para dividir com várias condições - java, regex, parsing, split

Usando String.split para dividir com várias condições - java, regex, parsing, split

Então, eu tenho a seguinte string:

deptid = 33 AND location = "NewYork"

basicamente, estou tentando analisá-lo em tokens. Eu tenho apenas usando Split.string e separando por espaço e que funcionaria para tudo o que eu preciso, no entanto, existem casos em que a string pode estar:

deptid = 33 AND location = "Nova York"

Eu preciso manter tudo entre as aspas docomo é Existe uma maneira de usar o String.split para dividi-lo de tal maneira que ele divida tudo pelo espaço, exceto quando encontrar aspas, isso me dará o sinal de tudo entre as aspas?

EDITAR: Desculpe por não esclarecer antes! Mas eu quero tudo nessa frase. Quero deptid, =, 33, AND, location, =, Nova York. A instrução AND nem sempre estará lá. Poderia ser

location = "Nova York"

Respostas:

2 para resposta № 1

Você precisa de algo mais poderoso do que apenas String.split, use 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);

3 para resposta № 2

Seu comentário:

Estou tentando armazená-lo em tokens String []. Então, eu esperaria que os tokens [0] fossem 33 e os tokens [1] fossem "Nova York".

Tente este

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

Saída:

33
"New York"