Разбор строки в Java с использованием шаблона - PullRequest
1 голос
/ 20 января 2012

Я пытаюсь разобрать 3 фрагмента информации из String.

Вот мой код:

text = "H:7 E:7 P:10";
String pattern = "[HEP]:";

Pattern p = Pattern.compile(pattern);

String[] attr = p.split(text);

Я бы хотел вернуть:

String[0] = "7"
String[1] = "7"
String[2] = "10"

Но все, что я получаю, это:

String[0] = ""
String[1] = "7 "
String[2] = "7 "
String[3] = "10"

Есть предложения?

Ответы [ 4 ]

4 голосов
/ 20 января 2012

Не очень элегантное решение, которое я только что разработал:

String text = "H:7 E:7 P:10";
String pattern = "[HEP]:";
text = text.replaceAll(pattern, "");
String[] attr = text.split(" ");
2 голосов
/ 20 января 2012

Из javadoc, http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#split(java.lang.CharSequence):

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

Сначала вы получаете пустую строку, потому что у вас есть совпадение в начале строки, кажется.

ЕслиЯ пробую ваш код со строкой text = "AH: 7 E: 7 P: 10" Я действительно получаю:

A 7 7 10

Надеюсь, это поможет.

1 голос
/ 20 января 2012

Исходя из вашего комментария, я понимаю, что вы хотите получить только цифры из этой строки (в определенном порядке?).

Поэтому я бы порекомендовал что-то вроде этого:

Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("H:7 E:7 P:10");
while(m.find()) {
    System.out.println(m.group());
}
1 голос
/ 20 января 2012

Я бы написал полное регулярное выражение, подобное следующему:

Pattern pattern = Pattern.compile("H:(\\d+)\\sE:(\\d+)\\sP:(\\d+)");
Matcher matcher = pattern.matcher("H:7 E:7 P:10");
if (!matcher.matches()) {
    // What to do!!??
}
String hValue = matcher.group(1);
String eValue = matcher.group(2);
String pValue = matcher.group(3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...