2013-03-15 2 views
1

Вход:Regex вытащить каждую некосмическими группу

2 43: 72: Y 

Желаемая Выход:

ArrayList<String> resultArr = { "2", "43:", "72:", "Y" }; 

Мой текущий код для создания этого массива является ...

String stateString = "2 43: 72: Y"; 
String stateStringFinder = "\\s*(\\S+)(\\s*(\\S+))+"; 
Pattern stateStringPattern = Pattern.compile(stateStringFinder); 

Matcher matcher = stateStringPattern.matcher(stateString); 

while(matcher.find()) { 
    resultArr.add(matcher.group()); 
} 

Содержание результатаArr однако { "2 43: 72: Y" }, который показывает, что мое регулярное выражение слишком жадно и соответствует всей строке.

Как я могу сломать его так, чтобы он помещал каждую «подстроку» из stateString, игнорируя пробелы?

+5

Вы знаете, что ваши разделители выглядеть, так почему не 'split'? – 2013-03-15 18:13:09

+1

Почему Perl в вашем списке тегов? – Borodin

+0

Я понял, что перлмоны смогут мне помочь lol – yiati

ответ

4

Использование String.split:

String stateString = "2 43: 72: Y"; 
String[] resultArray = stateString.split("\\s"); 
List<String> resultList = Arrays.asList(resultArray); 

Вы могли бы хотеть рассмотреть "\\s+" в качестве разделителя, а не просто "\\s", чтобы избежать пустых строк в вашем результате, когда у вас есть несколько пробелов подряд.

+1

вероятно должно быть: String [] resultArray = stateString.split ("\\ s +"); объединить несколько пространств. –

+0

Ах да: P это то, что я хочу, забыл о расколе. – yiati

+0

@AndrewT: действительно, я добавил замечание об этом. –

2

Попробуйте это.

String abc= "2 43: 72: Y"; 
List<String> strList = Arrays.asList(abc.split("\\s")); 
1

Что было бы намного проще, это:

List<String> list = Arrays.asList(stateString.split(" ")); 
1

Пример кода для решения вашего запроса:

public class RegexTester { 
public static void main(String[] args) { 
    String input = "2 43: 72: Y"; 

    Pattern pattern = Pattern.compile("[^\\s]+"); 
    Matcher matcher = pattern.matcher(input); 
    List<String> list = new ArrayList<String>(); 
    while (matcher.find()) { 
     list.add(matcher.group()); 
    } 
    System.out.println(list); 
} 

}

Смежные вопросы