/ / Usando String.split per dividere con più condizioni: java, regex, parsing, split

Utilizzando String.split per dividere con più condizioni: java, regex, parsing, split

Quindi ho la seguente stringa:

deptid = 33 AND location = "NewYork"

fondamentalmente sto cercando di analizzarlo in token. Ho appena usato Split.string e separato dallo spazio e questo avrebbe funzionato per tutto ciò di cui ho bisogno, tuttavia ci sono casi in cui la stringa potrebbe essere:

deptid = 33 AND location = "New York"

Ho bisogno di tenere tutto tra le virgolettecosì com'è. C'è un modo in cui posso usare String.split per dividerlo in modo tale da suddividere tutto per spazio tranne quando incontra una citazione che mi darà il segno di tutto tra le virgolette?

MODIFICARE: Scusa per non aver chiarito prima! Ma voglio ogni singola cosa in quella frase. Voglio deptid, =, 33, AND, location, =, New York. L'istruzione AND non sarà sempre lì. Potrebbe essere solo

location = "New York"

risposte:

2 per risposta № 1

Hai bisogno di qualcosa di più potente di String.split, usa 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 per risposta № 2

Il tuo commento:

Sto cercando di memorizzarlo nei token String []. Quindi mi aspetto che i token [0] siano 33 e i token [1] siano "New York".

Prova questo

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

Produzione:

33
"New York"