繁体   English   中英

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

[英]Out of bounds exception (string)

我正在为我的Java类开发一个项目,似乎无法弄清楚如何解决此问题。 基于例外,我知道它位于字符串索引长度之内,但是,我似乎无法纠正该问题。 这是我第一次学习Java,因此请原谅我的新问题。

手头任务的一些背景:我正在尝试导入ascii艺术文件(.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();
        }
    }
} 

您正在从索引0s.length()-2循环s.length()-2由于<运算符,将不包括s.length()-1 ),这将避免在调用s.charAt(x+1)出现异常s.charAt(x+1) ,但当您这样做时

s.charAt(x-1)

并且x = 0 ,那么您将得到一个异常,因为它将类似于s.charAt(-1) ,这是无效的。

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

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

乍看之下,除了先前的答案外,

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

永远不要终止,因为您没有更改x的值。 但是,如果前两个连续的字符不相等,您可能会很幸运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM