java - 越界异常(字符串)

标签 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();
        }
    }
} 

最佳答案

您正在从索引 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++)

关于java - 越界异常(字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24150438/

相关文章:

java.lang.ArrayOutOfBounds 写入文件时出现异常

android - android中ArrayIndexOutOfBoundsException的起源?

java - 单独模块中使用的 Spring AOP 切面

java - 将对话从一个 Activity 传递到另一个 Activity

arrays - 在clojure中将字节转换为字符串

将整数转换为字符,反之亦然

Java - 将一串数字按行读取到列中

java - 为特定键分配和取消分配数字

java - 如何确定 JSP 上填充了哪个输入字段?

java - 当数组大小未知时,在 for 循环中抛出数组越界异常(乘法持久性)