StringIndexOutOfBoundsException字符串索引超出范围错误

时间:2013-09-20 12:35:12

标签: java string syntax-error indexoutofboundsexception

在输入整数后输入字符串“s”时出现此错误。

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(Unknown Source)
    at oneB.change(oneB.java:4)
    at oneB.main(oneB.java:26)

以下是代码:(请注意代码仍然完整,我已输入一些打印语句进行检查)

import java.util.Scanner;
public class oneB {
    public static String change(int n, String s, String t) {

        if (s.charAt(0) == 'R') {
            return onetwo(s);
        }
        return s;
    }
    private static String onetwo(String one) {
        int c = one.indexOf('C');
        System.out.print(c);
        char[] columnarray = new char[one.length() - c - 1];
        for (int i = c + 1; i < one.length(); i++) {
            columnarray[i] = one.charAt(i);
        }
        int columnno = Integer.parseInt(new String(columnarray));
        System.out.print(columnno);
        return one;

    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System. in );
        int n = in .nextInt();
        String s = in .nextLine();
        String t = in .nextLine();
        System.out.print(change(n, s, t));
    }

}

6 个答案:

答案 0 :(得分:6)

调用in.nextInt()会在流中留下结束字符,因此以下对in.nextLine()的调用会产生一个空字符串。然后将空字符串传递给引用其第一个字符的函数,从而获得异常。

答案 1 :(得分:1)

以下是我调试它的方式:

  • 您在第4行得到的索引为StringIndexOutOfBoundsException

  • 这意味着调用s.charAt(0)时正在操作的String是空字符串。

  • 这意味着s = in.nextLine()s设置为空字符串。

怎么会这样?好吧,发生的事情是前一个nextInt()调用读取一个整数,但它在未消耗的整数之后留下了字符。所以你的nextLine()正在读取该行的剩余部分(直到行尾),删除换行符,然后给你剩下的......这是一个空字符串。

在您尝试将该行读入in.readLine()之前添加额外的s来电。

答案 2 :(得分:1)

问题的另一个解决方案是nextLine()而不是next(),而只使用 int n = in .nextInt(); String s = in .next();

{{1}}

答案 3 :(得分:0)

看起来s是一个空字符串""

答案 4 :(得分:0)

   for (int i = c + 1; i < one.length(); i++) {
        columnarray[i] = one.charAt(i);   // problem is here.
    }

你需要从0开始数组索引。但是你是从c + 1

开始的
    for (int i = c + 1,j=0; i < one.length(); i++,j++) {
        columnarray[j] = one.charAt(i);
     }

答案 5 :(得分:0)

问题是当你按Enter键时,你的int后跟一个'\ n'字符。只需像这样修改代码:

public static void main(String[] args) {
    Scanner in = new Scanner(System. in );
    int n = in .nextInt();
    in.nextLine(); //This line consume the /n afer nextInt
    String s = in .nextLine();
    String t = in .nextLine();
    System.out.print(change(n, s, t));
}