2016-11-02 10 views
1

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

Например, Word to split. Я получу word, to, split.

, но если "word to" split, я должен получить "word to", split. кавычка остается.

+2

Вам может понадобиться анализатор обрабатывать каждое ребро случай здесь (не мой downvote). –

+4

Я согласен с @TimBiegeleisen здесь. Вам нужно указать все допустимые входы и регистры, прежде чем мы начнем писать регулярные выражения. Кроме того, покажите нам, что вы пробовали :) – TheLostMind

+1

Я бы, вероятно, разделил и проверил, является ли текущая запись в результирующем массиве кавычкой, в этом случае я просто буду искать отметку закрытия, иначе вы уже знаете, что делать. Однако регулярное выражение создаст гораздо более чистое решение. –

ответ

3

Это то, что вы хотите ???

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
public class TmpTest { 
    public static void main(String args[]) { 
     final String regex = "\".*?\"|\\b\\w+\\b"; 
     final String string = "\"word to\" split i should get \"word to2\", split."; 

     final Pattern pattern = Pattern.compile(regex); 
     final Matcher matcher = pattern.matcher(string); 

     while (matcher.find()) { 
      System.out.println("Full match: " + matcher.group(0)); 
     } 
    } 
} 

demo

+0

Спасибо. Каким будет регулярное выражение, если цитата будет изменена на '$' например '$ word to $ split', я должен получить' word to', 'split' – beginner

+1

Тогда регулярное выражение должно быть' final String regex = "@. *? @ | \\ b \\ w + \\ b ";' –

+0

Спасибо. Последний вопрос. Если это знак доллара? – beginner

1

Вот как вы можете достичь этого:

String str = "\"word to\" split"; 

List<String> list = new ArrayList<String>(); 
Matcher m = Pattern.compile("([^\"]\\S*|\".+?\")\\s*").matcher(str); 
while (m.find()) 
    list.add(m.group(1)); // Add .replace("\"", "") to remove surrounding quotes. 


System.out.println(list);