编译继续运行(模式,匹配器任务)

时间:2014-02-10 18:27:09

标签: java regex loops compilation

当我运行程序时,它会继续运行并且控制台处于活动状态以进行输入,因此我必须停止。这是为什么? (任务是在句子中找到镜像词。使用INTELLIJ IDEA)。

public class Blinov11 {

    static String mirror(String str){
        String mirrored = "";
        for (int i = str.length() - 1; i >= 0; i--) {
            mirrored += str.charAt(i);
        }
        return mirrored;
    }
    public static void main(String[] args) {

        String text = new String("If the method atad fi takes data a sekat takes primitive data type as an argument, then the nhet String object representing the primitive data type value is return.");
        Pattern pattern = Pattern.compile("\\W\\w+\\W",Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(text);
        String word = "";
        while(matcher.find()){
            word = mirror(matcher.group());
            if(text.contains(word)){
                System.out.println(word);
            }
        matcher.reset();
        }
    }
}

1 个答案:

答案 0 :(得分:3)

这是因为您正在致电:

matcher.reset();

while loop内。根据{{​​3}}:

  

public Matcher reset()

     

重置此匹配器。 重置匹配器   丢弃其所有显式状态信息并设置其附加   位置为零。匹配器的区域设置为默认区域,   这是它的整个字符序列。锚定和透明度   这个匹配器的区域边界不受影响。

由于reset()循环中的while,匹配器每次都会重置,while (matcher.find())变为无限循环,因为它总是从起始位置找到。