У меня есть строка: 154545K->12345K(524288K)
Предположим, я хочу извлечь числа из этой строки.
Строка содержит группу 154545
в позиции 0
, 12345
в позиции 1
и 524288
в положении 2
.
Используя regex \\d+
, мне нужно извлечь 12345
который находится в позиции 1
.
Я получаю желаемый результат, используя это:
String lString = "154545K->12345K(524288K)";
Pattern lPattern = Pattern.compile("\\d+");
Matcher lMatcher = lPattern.matcher(lString);
String lOutput = "";
int lPosition = 1;
int lGroupCount = 0;
while(lMatcher.find()) {
if(lGroupCount == lPosition) {
lOutput = lMatcher.group();
break;
}
else {
lGroupCount++;
}
}
System.out.println(lOutput);
Но есть ли другой простой и прямой способ достичь этого, сохраняя регулярное выражение \\d+
(без использования группового счетчика)?
Если вы ожидаете, что ваш номер будет в позиции 1, вы можете использовать метод find(int start)
подобный этому
if (lMatcher.find(1) && lMatcher.start() == 1) {
// Found lMatcher.group()
}
Вы также можете преобразовать свой цикл в цикл для получения некоторого кода шаблона
String lString = "154540K->12341K(524288K)";
Pattern lPattern = Pattern.compile("\\d+");
Matcher lMatcher = lPattern.matcher(lString);
int lPosition = 2;
for (int i = 0; i < lPosition && lMatcher.find(); i++) {}
if (!lMatcher.hitEnd()) {
System.out.println(lMatcher.group());
}
попробуй это
String d1 = "154545K->12345K(524288K)".replaceAll("(\\d+)\\D+(\\d+).*", "$1");