如何使用 Java 中的 indexOf 进行计数?

How can I count with indexOf in Java?

我想从字符串中替换并打印它替换了多少次。

例如)
输入:aabba
来自 : aa
至:bb
ddbba
替换:1

输入:AAccaabbaaaaatt
来自 : aa
至:bb
ddccddbbddddatt
替换:4

我这里有问题:

for (int i = 0; i < input.length(); i++) {
        if (inputL.indexOf(curStrL, i) > -1) {
            cnt++;
            i = (inputL.indexOf(curStrL, i))+1; // this part!
        } else
            continue; 
    } // for

我的老师说只要使用 .indexOf.replace,以及 .toLowerCase

她举了一些例子,他们总是将两个字母替换为两个字母。 这就是为什么我输入“+1”来查找另一个字母的原因。 如果我删除那个 '+1',它会计算 'aaa' 两次。(aa a 和 a aa。它被替换为 'dda',所以这是错误的。) 但是这次当我只替换一个字母(ex.a)时,它计算的数字比实际必须的数字少。(例如,'aaa' 只计算了两次。)

结合老师的例子,效果很好,因为他们都替换了两个字母。 但是我想改进一下。

这是我的全部代码:

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    while (true) {
        System.out.print("Input : ");
        String input = scan.next();
        System.out.print("from : ");
        String curStr = scan.next();
        System.out.print("to : ");
        String chStr = scan.next();

        String inputL = input.toLowerCase();
        String curStrL = curStr.toLowerCase();
        String chStrL = chStr.toLowerCase();

        String output = inputL.replace(curStrL, chStrL);

        int cnt = 0;
        if (inputL.indexOf(curStrL) == -1) {
            System.out.println("Do it again");
        } else
            System.out.println(output);

    for (int i = 0; i < input.length(); i++) {
        if (inputL.indexOf(curStrL, i) > -1) {
            cnt++;
            i = (inputL.indexOf(curStrL, i))+1; 
            // *** to make the code find from the next letter! ***
        } else
            continue; 
    } // for

        if (cnt > 0)
            System.out.println("replaced : " + cnt);
        else
            {System.out.println("can't replace. Do it again");
            break;}

        System.out.println("----------------");

    } // while
} // main

只需将循环的计数器变量增加到要替换的字符串的长度即可。

for (int i = 0; i < input.length(); i++) {
            if (inputL.indexOf(curStrL, i) > -1) {
                cnt++;
                i = (inputL.indexOf(curStrL, i));  // EDIT by Shraft
                i = i + curStr.length() - 1;       // EDIT
                // *** to make the code find from the next letter! ***
            } else
                continue; 
        } // for