Java indexOf method for multiple matches in String

前端 未结 6 1416
走了就别回头了
走了就别回头了 2020-11-29 06:24

I had a question about the indexOf method. I want to find multiple cases of \"X\" in a string.

Suppose my string is \"x is x is x is x\", I want to find x in all of

相关标签:
6条回答
  • 2020-11-29 07:01

    You can specify the start index with indexOf. So, in your loop you store the last position of 'x', then search again using that index + 1.

    0 讨论(0)
  • 2020-11-29 07:04
    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);
    }
    
    0 讨论(0)
  • 2020-11-29 07:05

    You want to find multiple characters in a specific string. Yes, you can do that. You can use the overloaded version of indexOf method. Website has descibed all the overloaded version of indexOf methods in detail.https://www.javaians.com/indexof-java/. You can read a detail guide on Java indexOf method.

    0 讨论(0)
  • 2020-11-29 07:06

    Here is the solution with 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();
    

    Output will be like this :

    //1
    //6
    

    If you want to add upper case letters into your result, you need to change the filter's argument closure with :

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

    Then the output will be like this :

    //1
    //6
    //16
    

    Additionally if you just want to use the results or print it out for quick testing purposes you can do it with using forEach terminal operation:

    IntStream.range(0, text.length())
        .filter(i -> text.charAt(i) == key)
        .forEach(System.out::println);
    
    0 讨论(0)
  • 2020-11-29 07:12

    There's a another version of indexOf method, taking fromIndex as parameter.
    So, you can call it in a loop, each time passing prevPosition + 1 as a second parameter.

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

    0 讨论(0)
  • 2020-11-29 07:23

    There is a second variant of the indexOf method, which takes a start-index as a parameter.

    i = str.indexOf('x');
    while(i >= 0) {
         System.out.println(i);
         i = str.indexOf('x', i+1);
    }
    
    0 讨论(0)
提交回复
热议问题