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 № 1Você 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"