Java for Loop Trouble,索引错误

问题描述 投票:0回答:3
class Main{
    public static void main (String str[]) throws IOException{
      Scanner scan = new Scanner (System.in);
      String message = scan.nextLine();
      String[] sWords = {" qey ", " $ "," ^^ "};
      int lenOfArray = sWords.length;
      int c = 0;  
      int[] count = {0,0,0};  

在其中一个for循环中获取错误“java.lang.StringIndexOutOfBoundsException:String index out of range:-1”。我希望程序检查sWord数组中的每个子字符串,并计算它在主消息输入中出现的次数。

  for (int x = 0; x < sWords.length; x++){
    for (int i = 0, j = i + sWords[x].length(); j < message.length(); i++){
      if ((message.substring(i,j)).equals(sWords[x])){
        count[c]++;
        }
      }
    }
  }
}
java for-loop indexoutofboundsexception
3个回答
0
投票

按照您的方法,您需要在内循环中设置jwith的值。否则,它仅在第一次迭代时分配。这会改变内部for循环的上限,如下所示。搜索c后,还需要递增计数器索引sWord

import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class MyClass {
    public static void main (String str[]) throws IOException {
        Scanner scan = new Scanner(System.in);
        String message = scan.nextLine();
        String[] sWords = {" qey ", " $ ", " ^^ "};
        int lenOfArray = sWords.length;
        int c = 0;
        int[] count = {0, 0, 0};
        for (int x = 0; x < sWords.length; x++) {
            for (int i = 0; i <= message.length()-sWords[x].length(); i++) {
                int j = i + sWords[x].length();
                if ((message.substring(i, j).equals(sWords[x]))) {
                    count[c]++;
                }
            }
            ++c;
        }
    }
}

0
投票

您可以在下面的代码中找到sWords中每个字符串的出现次数:

public static void main(String[] args) { 
    try {
        Scanner scan = new Scanner(System.in);
        String message = scan.nextLine();
        String[] sWords = {" qey ", " $ ", " ^^ "};
        int lenOfArray = sWords.length;
        int c = 0;
        int[] count = {0, 0, 0};
        for (int i = 0; i < lenOfArray; i++) {
            while (c != -1) {
                c = message.indexOf(sWords[i], c);
                if (c != -1) {
                    count[i]++;
                    c += sWords[i].length();
                }
            }
            c = 0;
        }
        int i = 0;
        while (i < lenOfArray) {
            System.out.println("count[" + i + "]=" + count[i]);
            i++;
        }
    } catch (Exception e) {
        e.getStackTrace();
    }
}

-2
投票

最好使用apache commons lang StringUtils

int count = StringUtils.countMatches("a.b.c.d", ".");
© www.soinside.com 2019 - 2024. All rights reserved.