我想更改文本文件中的每个字母。但我有这个错误:
线程中的异常" main" java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0 at java.lang.String.charAt(String.java:658) 在Soru3.main(Soru3.java:31)
String line;
while (inputStream.hasNextLine()) {
line = inputStream.nextLine();
String[] harfler = line.split("");
String satir = "";
char[] ary = new char[harfler.length];
for (int i = 0; i < ary.length; i++) {
ary[i]=harfler[i].charAt(0);
}
for (int i = 0; i < line.length(); i++) {
if ( ( ((int) ary[i] <= 77) && ((int) ary[i] >= 65))
&& (((int) ary[i] >= 97) && ((int)ary[i] <= 109)))
ary[i] = (char) ( (int)(ary[i]) + 13) ;
else if ((((int) ary[i] > 77) && ((int) ary[i] <= 90))
&& (((int) ary[i] > 109) && ((int) ary[i] <= 122)))
ary[i] = (char) ((int) ary[i] - 11);
else {
ary[i]=ary[i];
}
System.out.println(satir + line);
}
}
inputStream.close();
答案 0 :(得分:0)
当你的文本文件中有一个empoty行时会发生这种情况。为了避免这种情况,您需要从以下位置更改循环:
for (int i = 0; i < ary.length; i++) {
要
for (int i = 0; i < line.length() != 0 && ary.length; i++) {
当你有一个空行时,你的行中不会有任何字符,我们知道字符串由字符数组备份。因此,当line为空时,你在char数组中没有任何元素,并且你试图在for循环中使用ary[i]=harfler[i].charAt(0);
访问第0个元素,因此你会得到一个例外。
答案 1 :(得分:0)
由于'ary'有harfler.length元素,你应该改变你的主循环:
for (int i = 0; i < line.length(); i++) {
到
for (int i = 0; i < ary.length; i++) {
答案 2 :(得分:0)
您获得的错误是由于源文件中的空行而导致的。我没有直接解决这个问题,而是看到你似乎只是以冗长而低效的方式将这一行分解为字符数组。
为什么不尝试:
while (inputStream.hasNextLine()){
line = inputStream.nextLine();
char[] ary = line.toCharArray();
for(int i = 0; i < ary.length; i++){
// Rest of code...
如果行可能是null
,你也应该首先检查它。