/ / Використання String.split для розділення з декількома умовами - java, regex, синтаксичний розбір, розкол

Використовуючи String.split для розділення з кількома умовами - java, regex, parsing, split

Отже, у мене є такий рядок:

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"