Java String.matches(“regex”)

时间:2013-09-19 03:37:33

标签: java regex string

我不太了解正则表达式。我试图找到以数字2,3,5或7开头的字符串,整个中间是1,3,7或9,最后是3或7。

我的尝试是[2357] [1379] * [37]。这是行不通的。我很感激修正。请记住,这适用于Java String.matches()函数。提前致谢

   for (int s = 0; s < primes.size(); ++s) {
        String p = primes.get(s);

        if (!p.matches([REGEX GOES HERE])) {
            System.out.println(p);
            primes.remove(s);
        }
    }

4 个答案:

答案 0 :(得分:1)

迭代从循环中删除的集合的标准方法是迭代向下,这样删除不会影响后续元素的索引:

for (int s = primes.size() - 1; s >= 0; s--) {
    String p = primes.get(s);
    if (!p.matches("[2357][1379]*[37]")) {
        System.out.println(p);
        primes.remove(s);
    }
}

现在无需担心删除元素的含义。

答案 1 :(得分:0)

嗨我不确定自己错了..但是我的初始模式中没有看到任何错误,例如

String aa = "[2357][1379]*[37]";
String bb = "2977313";

boolean matches = Pattern.matches(aa, bb); 
System.out.println("1) "+matches);

我从没有2开始,然后以3没有结束,并在其间添加了1379,它按预期工作。如果我错了,请纠正我

答案 2 :(得分:0)

以下代码“正常”:

    List<String> primes = new ArrayList<String>();
    primes.add("1");
    primes.add("2");
    primes.add("7");
    primes.add("23");
    primes.add("213");
    primes.add("243");
    primes.add("2113");
    primes.add("2193");
    for (int s = 0; s < primes.size(); ++s) {
        String p = primes.get(s);

        if (!p.matches("[2357][1379]*[37]")) {
            System.out.println(p);
            primes.remove(s);
        }
    }

输出:

1
7
243

您可能希望输出:

1
2
7
243

但是,primes.remove(s)会扰乱你的循环。这实际上不是您设计的目的。 (但谁知道?!)以下是避免弄乱你的循环的众多解决方案之一:

    for (String prime : new ArrayList<String>(primes)) {
        if (!prime.matches("[2357][1379]*[37]")) {
            System.out.println(prime);
            primes.remove(prime);
        }
    }

答案 3 :(得分:0)

您的正则表达式效果很好。但是,remove会将所有后续元素向左移动,因此通常位于String的{​​{1}}会移至{{ 1}},因此要检查的下一个元素位于s + 1而不是s。修正:

s