Как разбить строку, содержащую как двойные кавычки, так и экранирующие двойные кавычки в JAVA? - PullRequest
0 голосов
/ 14 марта 2019

Допустим, у меня есть одна входная строка "Tim \"Apple\"" "Mark \"FB\"" "Elon \"Cars\""

Я хочу разбить эту строку на массив строк на основе блока цитаты (не экранирующий блок цитаты) Результат должен выглядеть примерно так:

[Tim "Apple", Mark "FB", Elon "cars"]

Что я должен сделать, чтобы получить этот результат? Большое спасибо.

1 Ответ

0 голосов
/ 14 марта 2019

Как это:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Re {
        public static List<String> parse(String s) {
                Matcher m = Pattern.compile("\"([^\\\\\"]|\\\\.)+\"") // Match from one quote to the next non-escaped one
                        .matcher(s);
                List<String> matches = new ArrayList<>();
                while(m.find()) {
                        String match = m.group();
                        match = match.substring(1, match.length() - 1); // Remove the quotes from the beginning and end
                        match = match.replaceAll("\\\\(.)", "$1"); // Remove all escapes, without accidentally removing escaped backslashes
                        matches.add(match);
                }
                return matches;
        }

        public static void main(String[] args) {
                System.out.println(args[0]);
                System.out.println(parse(args[0]));
        }
}

Результат:

"Tim \"Apple\"" "Mark \"FB\"" "Elon \"Cars\""
[Tim "Apple", Mark "FB", Elon "Cars"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...