2010-11-17 4 views
6

Скажем, у меня есть строка с различными словами неизвестной длины. Я планирую разбить строку, используя регулярное выражение. Что-то вроде:Regex, чтобы получить первые два слова неизвестной длины из строки

String resString = origString.split(".*//s.*//s")[0]; 

Каким будет регулярное выражение для получения первых двух слов? Я думал .*//s.*//s, поэтому все символы, за которыми следует пробел, затем все символы, а затем другое пространство. Но использование этого дает мне ту же самую строку, что и раньше. Неужели я ошибаюсь?

Любая помощь будет оценена!

+0

Вы должны быть Узником Билла, не так ли? – tchrist

ответ

12

Если у вас есть только пробелы между словами, разделите их на \\s+. Когда вы разделите, массив будет самими словами. Первые два будет в arr[0] и arr[1], если вы:

String[] arr = origString.split("\\s+"); 
2

Предполагая, что ваши «слова» состоит из буквенно-цифровых символов, следующее регулярное выражение будет соответствовать первому 2 слова:

\w+\s+\w+ 
+0

На самом деле, это не работает должным образом в Java. – tchrist

+2

"\\ w + \\ s + \\ w +" будет работать на Java. Я имел в виду общий синтаксис regex. – buru

4

Если вы хотите, чтобы разделить его на точно символ пробела:

String[] parts = args[i].split(" "); 

Если вы хотите разделить его на любой символ пробела (пробел, табуляция, символ новой строки, кр):

String[] parts = args[i].split("\\s"); 

Для лечения нескольких смежных пространств в качестве одного из сепаратора:

String[] parts = args[i].split(" +"); 

То же самое для пробельных:

String[] parts = args[i].split("\\s+"); 

Первые два слова были бы parts[0] и parts[1]

5

С регулярными выражениями вы можете сделать что-то вроде этого:

public static ArrayList<String> split2(String line, int n){ 
    line+=" "; 
    Pattern pattern = Pattern.compile("\\w*\\s"); 
    Matcher matcher = pattern.matcher(line); 
    ArrayList<String> list = new ArrayList<String>(); 
    int i = 0; 
    while (matcher.find()){ 
     if(i!=n) 
      list.add(matcher.group()); 
     else 
      break; 
     i++; 
    } 
    return list; 
} 

, если вы хотите, первые русские слова, или просто:

public static String split3(String line){ 
    line+=" "; 
    Pattern pattern = Pattern.compile("\\w*\\s\\w*\\s"); 
    Matcher matcher = pattern.matcher(line); 
    matcher.find(); 
    return matcher.group(); 
} 

если вы хотите только первые и вторые слова.

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