/ / Použitie String.split na rozdelenie s viacerými podmienkami - java, regex, parsing, split

Použitie String.split na rozdelenie s viacerými podmienkami - java, regex, parsovanie, rozdelenie

Mám teda nasledujúci reťazec:

deptid = 33 AND location = "NewYork"

v podstate sa to snažím rozobrať na žetóny. Používal som iba Split.string a separáciu medzerou, a to by fungovalo pre všetko, čo potrebujem, existujú však prípady, keď môže byť reťazec:

deptid = 33 AND location = "New York"

Musím si ponechať všetko medzi úvodzovkamitak ako to je. Existuje nejaký spôsob, ako môžem použiť String.split na jeho rozdelenie takým spôsobom, že rozdelí všetko podľa priestoru okrem prípadu, keď sa stretne s citátom, dá mi token všetkého medzi citáciami?

EDIT: Ospravedlňujeme sa, že ste to objasnili už skôr! Ale chcem každú jednu vec v tej vete. Chcem deptid, =, 33, AND, location, =, New York. Vyhlásenie AND tam nebude vždy. Mohlo by to tak byť

location = "New York"

odpovede:

2 pre odpoveď č. 1

Potrebujete niečo výkonnejšie ako iba String.split, použite vzory:

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 pre odpoveď č. 2

Tvoj komentár:

Snažím sa to uložiť do tokenov String []. Očakával by som teda, že tokeny [0] budú 33 a tokeny [1] budú „New York“.

Vyskúšaj tento

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

Výkon:

33
"New York"