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个不同的正则表达式模式似乎很奇怪?