【问题标题】:Java indexOf method for multiple matches in String用于String中多个匹配的Java indexOf方法
【发布时间】:2011-06-26 15:51:03
【问题描述】:

我对 indexOf 方法有疑问。我想在一个字符串中找到多个“X”的情况。

假设我的字符串是“x is x is x is x”,我想在它的所有索引位置找到 x。 但是,您如何针对多种情况执行此操作?这甚至可以通过 indexOf 实现吗?

我做了 int temp = str.indexOf('x'); 它找到第一个 x。我尝试做一个 for 循环,在其中 i 被初始化为字符串的长度,但这没有用,因为我一直在寻找第一个 x 一遍又一遍。

for (int y = temp1; y >= 0;y-- ) 
{
    int temp = str.indexOf('x');
    System.out.println(temp);
}

但这不起作用。我应该使用正则表达式吗?因为我真的不知道如何使用正则表达式方法。

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: java indexof


    【解决方案1】:

    indexOf 方法还有第二个变体,它采用起始索引作为参数。

    i = str.indexOf('x');
    while(i >= 0) {
         System.out.println(i);
         i = str.indexOf('x', i+1);
    }
    

    【讨论】:

    • 啊,非常感谢大家。这很有意义,因为您只是根据上次匹配的位置遍历字符串。
    【解决方案2】:

    还有另一个版本的indexOf 方法,以fromIndex 为参数。
    所以,你可以循环调用它,每次都传递prevPosition + 1作为第二个参数。

    文档:
    http://download.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf(int, int)

    【讨论】:

      【解决方案3】:

      您可以使用indexOf 指定起始索引。因此,在您的循环中,您存储“x”的最后一个位置,然后使用该索引 + 1 再次搜索。

      【讨论】:

        【解决方案4】:

        这是使用 Streams API 的解决方案:

        String text = "Lets search for E ?";
        
        final char key = "e".charAt(0);
        int[] indices = IntStream.range(0, text.length())
            .filter(i -> text.charAt(i) == key)
            .toArray();
        

        输出将是这样的:

        //1
        //6
        

        如果您想在结果中添加大写字母,您需要将filter 的参数闭包更改为:

        .filter(i -> Character.toLowerCase(text.charAt(i)) == key)
        

        那么输出会是这样的:

        //1
        //6
        //16
        

        此外,如果您只是想使用结果或将其打印出来以进行快速测试,您可以使用forEach 终端操作:

        IntStream.range(0, text.length())
            .filter(i -> text.charAt(i) == key)
            .forEach(System.out::println);
        

        【讨论】:

          【解决方案5】:
          String name = "alameer kaiser aziz";
          String found = "a";
          int num = name.indexOf(found);
          while (num >=0) {
              System.out.println(num);
              num = name.indexOf(found,num+1);
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-09-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-01
            • 1970-01-01
            • 2021-04-14
            相关资源
            最近更新 更多