Java StringIndex越界异常

Java StringIndex越界异常,java,Java,我试图找出数组中每个字符串中存在的字符数 所以我写了这段代码。它不起作用,并且在线路中出错 char c = a.charAt(0); 似乎有一个空字符串传递给这个方法,所以它抛出了这个异常,但我不知道如何修复这个问题并使代码正常工作 我该怎么做才能修好它? 代码如下: public class Gem_Stones { public static int counter = 0; public static int result = 0; public static

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

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;
    }
公共级宝石{
公共静态整数计数器=0;
公共静态int结果=0;
公共静态void main(字符串[]args){
扫描仪c=新扫描仪(System.in);
int N=Integer.parseInt(c.nextLine());
字符串[]Gem=新字符串[N];

对于(int i=0;i在字符(0)之前检查字符串的isEmpty(),如果为true,则返回该值。

如果您所做的只是试图找出数组中每个字符串中存在的字符数,那么您将执行许多不必要的步骤,例如删除字符

考虑使用嵌套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;
}
publicstaticintsolve(字符串[]字符串,字符目标){
整数计数=0;
用于(字符串s:字符串){
对于(int i=0;i
在执行任何操作之前,您需要检查字符串是否为空(以及是否为空)


什么是扫描仪输入?你调试过你的应用程序吗?可能是你的字符串为空,每@VD',输入似乎有一个空行。输入是什么?输入是一个字符串数组此方法有效,但不完全符合我的要求。例如,如果输入为“aaa”、“abc”、“oia”,则结果为5,因为它每“a”计数一次有。但是结果必须是1,因为这里的每个字符串中只有一个字符“a”。谢谢:)。我明白了。在这种情况下,我建议使用以下算法。首先在数组中找到最短的单词。然后使用嵌套的for循环,在外部的短字符串和内部的字符串数组中迭代字符。跟踪初始化为short string.length()的计数,并检查每个字符串是否包含该字符。如果不包含该字符,则计数-并断开。最后说明短字符串中的重复字符。您确实希望避免从字符串中删除字符。我使用if(a==null | | a.equals(“”)进行了检查,并提供了帮助,谢谢
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);