Java 越界异常(字符串)
我正在为我的Java类做一个项目,似乎不知道如何解决这个问题。基于这个异常,我知道它位于字符串索引长度内,但是,我似乎无法纠正这个问题。这是我第一次尝试学习Java,所以请原谅我的新手问题 手头任务的一些背景:我正在尝试导入一个ascii艺术文件(.txt),将其转换为csv格式,然后输出到指定的文件。方法签名由讲师提供,无法操作。此代码可以编译,但在运行时,会引发一个越界异常,引用我对Java 越界异常(字符串),java,string,indexoutofboundsexception,Java,String,Indexoutofboundsexception,我正在为我的Java类做一个项目,似乎不知道如何解决这个问题。基于这个异常,我知道它位于字符串索引长度内,但是,我似乎无法纠正这个问题。这是我第一次尝试学习Java,所以请原谅我的新手问题 手头任务的一些背景:我正在尝试导入一个ascii艺术文件(.txt),将其转换为csv格式,然后输出到指定的文件。方法签名由讲师提供,无法操作。此代码可以编译,但在运行时,会引发一个越界异常,引用我对imageToNumRep的调用 以下是我在这一特定部分的代码: import java.io.*;
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();
}
}
}
import java.io.*;
导入java.util.*;
公共类转换{
公共静态void main(字符串[]args)引发FileNotFoundException{
文件输入=新文件(“Flag.txt”);
文件输出=新文件(“result.txt”);
imageToNumRep(输入、输出);
}
公共静态void imageToNumRep(文件输入、文件输出)引发FileNotFoundException{
扫描仪输入=新扫描仪(输入);
PrintStream out=新的PrintStream(输出);
整数计数=0;
while(在.hasNextLine()中){
计数++;
字符串s=in.nextLine();
输出。打印(“”);
对于(int x=0;x您正在从索引0
循环到s.length()-2
(s.length()-1
将不包括在内,因为您正在从索引0
循环到s.length()-2
(s.length())-1
将不包括在内,因为您正在从索引0
循环到s.length()-2
(s.length()-1
将不包括在内,因为您正在从索引0
循环到s.length()-2
(s.length())-1
将不包括在内,因为除了前面的答案之外,还有一个,乍一看
while(s.charAt(x)==s.charAt(x+1)) {
num++;
}
不应终止,因为您没有更改x的值。但是,如果前两个连续字符不相等,您可能会很幸运。除了前面的答案,乍一看
while(s.charAt(x)==s.charAt(x+1)) {
num++;
}
不应终止,因为您没有更改x的值。但是,如果前两个连续字符不相等,您可能会很幸运。除了前面的答案,乍一看
while(s.charAt(x)==s.charAt(x+1)) {
num++;
}
不应终止,因为您没有更改x的值。但是,如果前两个连续字符不相等,您可能会很幸运。除了前面的答案,乍一看
while(s.charAt(x)==s.charAt(x+1)) {
num++;
}
不应终止,因为您没有更改x的值。但是,如果前两个连续字符不相等,您可能会很幸运。我们需要查看堆栈跟踪以及引发异常的行。是的,在这里。线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1在java.lang.String.charAt(String.java:658)在Convert.imageToNumRep(Convert.java:24)在Convert.main(Convert.java:8)我们需要查看堆栈跟踪以及抛出异常的行。是的,这里是线程“main”中的.exceptionjava.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1在java.lang.String.charAt(String.java:658)在Convert.imageToNumRep(Convert.java:24)在Convert.main(Convert.java:8)我们需要查看堆栈跟踪以及抛出异常的行。是的,这里是线程“main”中的.exceptionjava.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1在java.lang.String.charAt(String.java:658)在Convert.imageToNumRep(Convert.java:24)在Convert.main(Convert.java:8)我们需要查看堆栈跟踪以及抛出异常的行。是的,这里是线程“main”中的.exceptionjava.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1在java.lang.String.charAt(String.java:658)在Convert.imageToNumRep(Convert.java:24)在Convert.main(Convert.java:8)在哪里-2在?我没有看到那一行。条件是x
,所以s.length()-2
将是x的最后一个值。循环是for(int x=0;x
,因此x
将从0
变为s.length()-2
,因为哦,好的。对不起,我是在寻找编码逻辑,而不是迭代。谢谢你指出这一点,非常感谢你,这很有意义。现在-2在哪里?我没有看到那一行。条件是xs.length()-2
将是x的最后一个值。循环是for(int x=0;x
,因此x
将从0
变为s.length()-2
,因为哦,好的。对不起,我是在寻找编码逻辑,而不是迭代。谢谢你指出这一点,非常感谢你,这很有意义。现在-2在哪里?我没有看到那一行。条件是xs.length()-2
将是x的最后一个值。循环是for(int x=0;x
,因此x
将从0
变为s.length()-2
,因为哦,好的。对不起,我正在查找