String Index Out of Bounds Exception

时间:2014-05-21 05:26:56

标签: java

我试图找出数组中每个字符串中存在的字符数 所以我写这个代码。它不起作用并在行中出错

char c = a.charAt(0);

似乎有一个空字符串传递给方法所以它抛出此异常,但我不知道如何解决这个问题并使代码工作 我该怎么做才能解决这个问题? 这是代码:

public class Gem_Stones {
    public static int counter = 0;
    public static int result = 0;
    public static void main(String [] args){
        Scanner c = new Scanner(System.in);
        int N = Integer.parseInt(c.nextLine());
        String [] Gem = new String[N];
        for(int i =0; i<N ; i++){
            Gem[i] = c.nextLine();
        }
        solv(Gem[0] , subArr(Gem));
        System.out.println(result);
    }

    public static String [] subArr(String [] input){
        String [] ans = new String[input.length - 1];
        for(int i =0 ; i<ans.length ; i++){
            ans[i] = input[i+1];
        }return ans;
    }

    public static void solv(String a , String [] str){
        char c = a.charAt(0);
        for(int i = 0 ; i<str.length ; i++){
            if(contain(c , str[i]))
                counter++;
        }

        if(counter == str.length){
            result++;
            solv(sub(a) , str);
        } else {
            solv(sub(a) , str);
        }
    }

    public static String sub(String input){
        StringBuilder sb = new StringBuilder(input);
        sb = sb.deleteCharAt(0);
        String result = sb.toString();
        return result;
    }

    public static boolean contain(char c , String s){
        for(int i=0 ; i<s.length(); i++){
            if(s.charAt(i) == c)
                return true;
        }return false;
    }

}

3 个答案:

答案 0 :(得分:0)

检查isEmpty()的字符串是否为charAt(0),如果为true则返回。

答案 1 :(得分:0)

如果您正在尝试查找数组中每个字符串中存在的字符数,那么您正在执行许多不必要的步骤,例如删除字符。

考虑使用嵌套for循环:

public static int solve (String[] strings, char target) {
  int count = 0;

  for (String s : strings) {
    for (int i = 0; i < s.length(); i++) {
      if (target == s.charAt(i)) {
        count++;
      }
    }
  }

  return count;
}

答案 2 :(得分:0)

在进行任何操作之前,你需要检查字符串是否为空(并检查是否为空)

if(a == null || a.equals("") ){
  return null; //or throws an exception or -1 or anything you want to  do when a is empty
}

char c = a.charAt(0);