расщепление строки, разделенной пробелами, игнорирование пробелов в одинарных кавычках - PullRequest
0 голосов
/ 20 апреля 2019

Мой ввод Java String str = "aa 2 xx 'b cc dd e' -o se '4-5'"

Я хочу вывести токены, разделенные пробелами, за исключением пробелов внутри одинарных кавычек. Итак, вывод должен быть:

aa
2
xx
'b cc dd e'
-o
se
'4-5'

Я могу сделать это, разделив строку на пустое пространство, а затем объединить последовательность строк, таких как 'b, cc, dd, e, чтобы получить обратно' b cc dd e ', но я хочу лучший способ, возможно, используя некоторое регулярное выражение.

1 Ответ

0 голосов
/ 20 апреля 2019

Я думаю, что вы можете сделать это путем итерации строки и использования логического выражения для определения кавычек.

попробуйте использовать это:

  public List<String> test(String a){
    final List<String> list = new ArrayList<>();
    boolean quotes = false;
    StringBuilder sb = new StringBuilder();
    for(char c: a.toCharArray()){
        if(quotes){
            if('\'' == c) {
                quotes = false;
                if(!sb.toString().isEmpty()) {
                    list.add(sb.toString());
                }
                sb = new StringBuilder();
            } else {
                sb.append(c);
            }
        }else {
            if (' ' == c) {
                if (!sb.toString().isEmpty()) {
                    list.add(sb.toString());
                    sb = new StringBuilder();
                }
            } else if ('\'' == c) {
                quotes = true;//entra na string do quote

            } else{
                sb.append(c);
            }
        }
    }

    if(!sb.toString().isEmpty()){
        list.add(sb.toString());
    }
    return list;
}
...