首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试模式(正则表达式)在Java (Android)中失败

调试模式(正则表达式)在Java (Android)中失败
EN

Stack Overflow用户
提问于 2012-03-28 00:39:06
回答 1查看 3.9K关注 0票数 2

我在一段代码中进行模式匹配,这段代码在一种情况下工作得很好,但在另一种情况下就不行了。代码当前为:

代码语言:javascript
复制
DLVRYrx = Pattern.compile("(\\d+\\s\\p{Letter}+\\s\\d+)\\s(\\d+(?:\\.\\d+)?)\\s(\\d+)");
Log.d(TAG, "* Regex matched " + DLVRYrx.matcher("01 Jan 01 60.9876 1234").groupCount() + " groups"); // prints 3 as expected in logcat
for (int i=19; i<(fields-6); i++) {
    final String DATAstr = values[i];
    try {
        Matcher Dmatch = DLVRYrx.matcher(DATAstr);
        String data1 = Dmatch.group(0);
    } catch (IllegalStateException e) {
        Log.e(TAG, "! Text ["+DATAstr+"] didn't match regex");
    }
}

代码在Dmatch.group(0)行抛出IllegalStateException。catch的logcat行的输出是"01 Jan 01 60.9876 1234“,如上所述。

对我正在读取的数据文件执行十六进制转储,结果显示空格是预期的空格,并且在匹配的文本前后没有丢失字符。对调试有什么建议吗?

我做了一点代码更改,只是为了测试我的表达式本身,现在我更困惑了。在循环中,我现在首先检查字符串是否与模式匹配,然后通过编译后的版本运行它:

代码语言:javascript
复制
Pattern P = Pattern.compile(DLVRYrxStr);
if(!DATAstr.matches(DLVRYrxStr)) {
    Log.e(TAG, "[" + DATAstr + "] doesn't match regex");
    break;
}
Matcher Dmatch = P.matcher(DATAstr);

不幸的是(?)模式确实匹配,因此落入P.matcher行,之后的行在我尝试读取第一个匹配组时抛出异常:

代码语言:javascript
复制
W/System.err( 1238): java.lang.IllegalStateException: No successful match so far
W/System.err( 1238):    at java.util.regex.Matcher.ensureMatch(Matcher.java:607)
W/System.err( 1238):    at java.util.regex.Matcher.group(Matcher.java:358)

解决方案是添加".matches()“检查,如下所示:

代码语言:javascript
复制
Matcher Dmatch = DLVRYrx.matcher(DATAstr);
Dmatch.matches();
String data1 = Dmatch.group(0);

是的,我在代码中的'if‘语句中使用了它,但让它像上面那样自由挂起就行了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-28 00:54:54

您的DLVRYrx.matcher(...).groupCount()只是告诉您,在创建它的模式中有3个匹配组。

(\\d+\\s\\p{Letter}+\\s\\d+)(\\d+(?:\\.\\d+)(\\d+)

您需要调用以下任一

matcher.matches()

matcher.lookingAt()

matcher.find()

在尝试获取matcher.group(0)之前,因为这些方法会提示java解析字符串。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9893875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档