2013-11-15 1 views
0

Как я могу взять первый элемент, соответствующий шаблону?Как совместить первое совпадение?

Pattern pattern = Pattern.compile("(\\d+)K"); 
Matcher matcher = pattern.matcher("CARRY8K"); 
baggageWeight = matcher.group(); //I'd like to extract the "8" 

Результат: java.lang.IllegalStateException: No match found

Почему?

+0

Под «extract» вы имеете в виду «удалить» из строки, или вы хотите установить для нее переменную или что? – DerStrom8

ответ

3

matcher.group() throws IllegalStateException Если матч не был выполнен, или если предыдущая операция совпадения не удалась. Здесь вы не использовали find(), который пытается найти следующую подпоследовательность входной последовательности, которая соответствует шаблону.

0

Если вы, как это вы извлечь «8» из строки «CARRY8K»

Pattern pattern = Pattern.compile("(\\d+)K"); 
Matcher matcher = pattern.matcher("CARRY8K"); 
if (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 
-1

Я предложил бы использовать String.indexOf (строки), чтобы найти местоположение строки в основной строке. Используя indexOf, вы можете извлечь значение по указанному индексу. Например:

String s = "CARRY8K"; 
int index = s.indexOf("8"); 

«index» будет установлен в положение для первого экземпляра указанного символа. В этом случае «8». Затем вы можете использовать индекс для выполнения других операций - либо распечатать местоположение символа, либо удалить его из основной строки.

Если вы хотите, чтобы удалить его, просто использовать StringBuilder и setCharAt() метод:

StringBuilder newString = new StringBuilder(s); 
newString.setCharAt(index, ''); 

Это заменит символ по указанному индексу к заготовке, эффективно удаляя его из основной строки.

+0

Шаблон Regex используется для поиска числа, которое НЕ знает раньше ... – membersound

+0

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