如何首次出现模式匹配?

时间:2013-11-15 14:42:03

标签: java matcher

如何始终将第一个元素与模式匹配?

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

为什么?

3 个答案:

答案 0 :(得分:3)

matcher.group() throws IllegalStateException如果尚未尝试匹配,或者上一次匹配操作失败。这里你没有使用find()试图找到与模式匹配的输入序列的下一个子序列。

答案 1 :(得分:0)

如果你喜欢这样,你从字符串“CARRY8K”中提取“8”

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

答案 2 :(得分:-1)

我建议使用String.indexOf(string)来查找主字符串中字符串的位置。使用indexOf,然后可以在指定的索引处提取值。例如:

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

“index”将设置为指定字符的第一个实例的位置。在这种情况下,“8”。然后,您可以使用索引执行其他操作 - 打印字符的位置,或从主字符串中删除它。

如果要删除它,只需使用stringbuilder和setCharAt()方法:

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

这会将指定索引处的字符替换为空白,从而有效地将其从主字符串中删除。