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ď č. 1Potrebujete 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"