超出范围的异常(字符串)

时间:2014-06-10 20:40:54

标签: java string indexoutofboundsexception

我正在为我的Java类开发一个项目,似乎无法弄清楚如何解决这个问题。基于异常,我理解它位于字符串索引长度内,但是,我似乎无法纠正这个问题。这是我第一次尝试学习Java,所以请原谅我的新手问题。

手头任务的一些背景:我正在尝试导入ascii art文件(.txt),将其转换为csv格式,并输出到指定文件。方法签名由教师提供,不能被操纵。此代码编译,但在运行时,引发了对imageToNumRep的调用的超出范围异常。

以下是此特定部分的代码:

    import java.io.*;
    import java.util.*;

    public class Convert{
        public static void main(String[] args) throws FileNotFoundException {
            File input=new File("Flag.txt");
            File output=new File("result.txt");
            imageToNumRep(input, output);
        }

    public static void imageToNumRep(File input, File output) throws FileNotFoundException {
        Scanner in=new Scanner(input);
        PrintStream out= new PrintStream(output);
        int count=0; 
        while(in.hasNextLine()) {
            count++;
            String s=in.nextLine();
            out.print("(");
            for(int x=0; x < s.length()-1; x++) {
                int num=1;
                while(s.charAt(x)==s.charAt(x+1)) {
                    num++;
                }
                out.print(num+s.charAt(x-1));
                num=1;
                if(s.charAt(x) != s.charAt(x-1) && s.charAt(x) != s.charAt(x+1)) {
                    out.print("1,"+s.charAt(x));
                } else {
                    num=1;
                }
            }
            out.print(")");
            out.println();
        }
    }
} 

2 个答案:

答案 0 :(得分:2)

您正在从索引0循环到s.length()-2(由于s.length()-1运算符而不会包含<),这样可以避免出现异常你打电话给s.charAt(x+1),但是当你做

s.charAt(x-1)

x = 0,然后您会收到异常,因为它会像s.charAt(-1)一样无效。

你能做什么? 您可以从1开始迭代:

for(int x = 1; x < s.length() - 1; x++)

答案 1 :(得分:1)

除了上一个答案,乍一看,

while(s.charAt(x)==s.charAt(x+1)) {
num++;
}

永远不应该终止,因为你没有改变x的值。如果前两个连续的字符不相等,你可能会很幸运。