2015-11-09 3 views
1

Следующий код возвращает приложение aaa bbbb xxxx Ass. Однако я не хочу извлекать слова xxxx Ass. Как исправить эту проблему?Извлечь все первые слова после слова «Класс»

public static final String EXAMPLE_TEST = "ddd with fff Node preceded" 
      + " by Class Application bzxcd by " 
      + "Class aaa ds preceded by Class bbbb xxxx Ass"; 

String pattern = ".*?Class(\\s)+(\\w+)"; 
System.out.println(EXAMPLE_TEST.replaceAll(pattern, "$1$2")); 

Ожидаемый результат:

Application aaa bbbb 
+0

Пожалуйста переформулировать свой вопрос (вместе с несколькими testcases). Неясно, чего вы хотите достичь. –

+0

Этот код имеет несколько опечаток. Он также плохо отформатирован. Пожалуйста, отправьте код, который фактически компилирует, запускает и демонстрирует проблему. Узнайте, как создать [mcve]. –

+0

Я обновил вопрос. – newday

ответ

1

Вам не нужно использовать replaceAll здесь. Используйте это регулярное выражение:

"\\bClass\\s+(\\w+)\\b"; 

и использовать Matcher.find() метод, чтобы вы матчей, как это:

Pattern p = Pattern.compile("\\bClass\\s+(\\w+)\\b"); 

Matcher m = p.matcher(EXAMPLE_TEST); 

while (m.find()) { 
    System.out.println(m.group(1)); 
} 
1
String EXAMPLE_TEST = "ddd with fff Node preceded" 
      + " by Class Application bzxcd by " 
      + "Class aaa ds preceded by Class bbbb xxxx Ass"; 


String[] str=EXAMPLE_TEST.split(" ");  

    for (int i = 0; i < str.length-1; i++) { 
     if (str[i].equals("Class")){ 
      ++i; 
      System.out.print(str[i]+" "); 

     } 

Выход: Применение ааа BBBB

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