0

我对 Java 还很陌生,我刚开始使用 RegEx,我想知道哪种方法是检查在给定文本墙作为输入的情况下是否找到某个正则表达式并且它有效的最佳方法。我举个例子。

我有这个文本文件作为输入:

Derpity64_1 64 3 6 1

HerpDerp32 1 6 3 0 26

呼尔杜尔16 2 5 7 7 78

现在,与我相关的部分是 HerpDerp32。在确保文本文件包含 HerpDerp 字符串之后,我想确保 HerpDerp 之后的数字(在本例中为 32)是 16、32 或 64。

我该如何继续?如果我犯了任何错误/没有很好地解释,我很抱歉。

4

2 回答 2

0

这里不需要正则表达式...

您所要做的就是遍历文件(一次读取一行)。

找到以搜索词开头的行后,只需检查该词后面的字符即可。

您可以使用String.substring()检查 HerpDerp 之后的字符。

如果你打算使用 java,你不妨习惯阅读 API 文档。

这是带有字符串函数的页面。你会经常使用这个

   http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

这是FileReader 类的文档,在这里也很有帮助。

于 2012-06-13T00:05:29.763 回答
0

你真的必须使用正则表达式吗?Jahroy 提出了更快的建议

String[] data = { "Derpity64_1 64 3 6 1", "HerpDerp32 1 6 3 0 26",
        "HurrDurr16 2 5 7 7 78" };

for(String s:data){//iterate over all Strings in 'data' array
    if (s.startsWith("HerpDerp"))//check if tested string starts with HerpDerp
        //HerpDerp32 1 6 3 0 26
        //        ^^
        //0123456789
        //show only chars from 8 till 9 index
        System.out.println(s.substring(8,10));//(10 is excluded)
}

编辑:

我不确定这是否是您正在寻找的,因为它基于您的原始问题,但请使用您的数据和正则表达式尝试它。

String[] data = { "Derpity64_1 64 3 6 1", "HerpDerp32 1 6 3 0 26",
    "HurrDurr16 2 5 7 7 78" };
Pattern p=Pattern.compile("^HerpDerp(\\d*)");
for (String s : data) {
    Matcher m=p.matcher(s);
    if(m.find()) 
        System.out.println(m.group(1));
        //group(1) will return content from first bracket in regex
}
于 2012-06-13T00:25:44.133 回答