Отже, у мене є такий рядок:
deptid = 33 AND location = "Нью-Йорк"
я в основному намагаюся розібрати його на лексеми. Я просто використовував Split.string і розділяв пробіл, і це працювало б на все, що мені потрібно, проте є випадки, коли рядок може бути:
deptid = 33 AND location = "Нью-Йорк"
Мені потрібно тримати все між цитатамитак воно і є. Чи є спосіб я використовувати String.split, щоб розділити його таким чином, він розділить все на простір, за винятком випадків, коли він зустрінеться з цитатою, це дасть мені знак усього між цитатами?
Редагувати: Вибачте, що не уточнили раніше! Але я хочу, щоб кожна річ у цьому реченні. Я хочу deptid, =, 33, AND, location, =, New York. Заява AND не завжди буде там. Це просто могло бути
location = "Нью-Йорк"
Відповіді:
2 для відповіді № 1Вам потрібно щось більш потужне, ніж просто String.split, використовуйте шаблони:
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 для відповіді № 2
Ваш коментар:
Я намагаюся зберігати його в жетонах String []. Тож я б очікував, що жетонів [0] буде 33, а жетонів [1] - "Нью-Йорк".
Спробуй це
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);
}
Вихід:
33
"New York"