java中的正则表达式模式未更新
我目前有以下情况:java中的正则表达式模式未更新,java,regex,Java,Regex,我目前有以下情况: int noOfRPs = 3; try { BufferedReader br = new BufferedReader(new InputStreamReader(getAssets().open("wifi_log"))); // There are 3 RP's for (int RP = 0; RP < noOfRPs; ++RP)
int noOfRPs = 3;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(getAssets().open("wifi_log")));
// There are 3 RP's
for (int RP = 0; RP < noOfRPs; ++RP){
String line;
while ((line = br.readLine()) != null){
String pattern = "^RP" + RP;
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(line);
if (m.find())
System.out.println("match = " + line);
}
}
}
catch (IOException e){
System.out.println("IO Error, no file found");
e.printStackTrace();
}
int noOfRPs=3;
试一试{
BufferedReader br=新的BufferedReader(新的InputStreamReader(getAssets().open(“wifi_日志”));
//有3个RP
对于(int-RP=0;RP
我想匹配以下模式:RP0
然后是RP1
,最后是我的文本文件中的RP2
。然而,目前,它仍在持续匹配RP0
,尽管我在每次运行for循环时更改了变量模式
有人知道这里发生了什么吗
感谢您的帮助。之所以会出现这种情况,是因为RP
中的增量(注意,仔细检查变量约定)在循环迭代时比高一级
一个快速的解决方案是反转循环的层次结构,将for
循环放置在while
循环中
因此:
String line;
while ((line = br.readLine()) != null){
for (int RP = 0; RP < noOfRPs; ++RP){
String pattern = "^RP" + RP;
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(line);
if (m.find())
System.out.println("match = " + line);
}
}
字符串行;
而((line=br.readLine())!=null){
对于(int-RP=0;RP
您仅在for
循环的第一次迭代中读取文件。在以后的迭代中,br.readLine()
将立即返回null
,并且不会进行任何匹配
一个想法是将三个模式合并为一个模式,同时匹配所有三个子模式。要实现这一点,请查看。简而言之,可以使用管道(|
)来组合模式。在while循环中RP不会改变。(1)您正在为文件中的每一行编译正则表达式,这没有多大意义。(2) 您在文件行上迭代。。。现在你已经到了文件的末尾。现在增加RP,但仍然位于文件的末尾。(3) 你的线圈是由内向外的吗?(4) 为什么不编译三个正则表达式并使用每一个呢?@DaveNewton感谢您的回复。关于你的第二点,我怎样才能解决这个问题?我需要把这个文件看三遍。我第一次尝试使用RP0
提取行。。第二次是RP1
,第三次是RP2
。在不知道细节的情况下,我认为您只需要检查文件一次,检查每一行的RP0/RP1/RP2,然后将它们填充到适当的集合中(即,每个RPn一个)。@DaveNewton在本例中,我需要使用3个正则表达式。。。然而,我最终可能不得不使用超过50个。手动创建50个不同的正则表达式模式似乎很奇怪?