gpt4 book ai didi

java - 当我尝试使用 BufferedReader 跳过多行时,为什么会出现 StringIndexOutOfBoundsException?

转载 作者:行者123 更新时间:2023-11-30 10:02:30 24 4
gpt4 key购买 nike

我正在开发一款游戏,我想使用这个神话名称文本文件来程序化生成星系太阳系名称。

当我读取文本文件时,如果给定行上有不是名称的内容,我会告诉我正在使用的 while 循环继续。这似乎在一些(不是全部)区域中有多个没有名称的行抛出异常。

我怎样才能使程序在不抛出异常或读取没有名称的行的情况下运行?

我的代码:

public class Rewrite {

public static void main(String[] args) {

loadFromFile();
}

private static void loadFromFile() {

String[] names = new String[1000];

try {

FileReader fr = new FileReader("src/res/names/Galaxy_System_Names.txt");
BufferedReader br = new BufferedReader(fr);

String aLine;
int countIndex = 0;
while ((aLine = br.readLine()) != null) {

// skip lines without names
if (aLine.equals(String.valueOf(System.lineSeparator()))) {
aLine = br.readLine();
continue;
} else if (aLine.equals("&")) {
aLine = br.readLine();
continue;
} else if (aLine.startsWith("(")) {
aLine = br.readLine();
continue;
}

System.out.println(aLine);

// capitalize first letter of the line
String firstLetter = String.valueOf(aLine.charAt(0));
aLine = firstLetter + aLine.substring(1);

names[countIndex++] = aLine;
}

br.close();

} catch (IOException e) {

e.printStackTrace();
}
}
}

抛出的异常:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47)
at java.base/java.lang.String.charAt(String.java:702)
at utilities.Rewrite.loadHumanNamesFromFile(Rewrite.java:39)
at utilities.Rewrite.main(Rewrite.java:10)

文本文件示例:这会在名称“amor”之后引发错误

áed
áedán
aegle
aella
aeneas
aeolus
aeron
(2)

&
aeson
agamemnon
agaue
aglaea
aglaia
agni
(1)
agrona
ahriman
ahti
ahura
mazda
aias
aigle
ailill
aineias
aino
aiolos
ajax
akantha
alberic
alberich
alcides
alcippe
alcmene
alcyone
alecto
alekto
alexander
alexandra
alexandros
alf
(1)
alfr
alkeides
alkippe
alkmene
alkyone
althea
alvis
alvíss
amalthea
amaterasu
amen
ameretat
amirani
ammon
amon
amon-ra
amor

&
amordad
amulius
amun

最佳答案

来自 BufferedReader::readLine 的文档:

Returns: A String containing the contents of the line, not including any line-termination characters

因此,当您到达文件的这一部分时:

amor

&

它将读取空行并去除换行符,剩下的就是一个空的String。因此它不会被您的 if 语句捕获:

if (aLine.equals(String.valueOf(System.lineSeparator())))

您需要为 isEmpty() 添加一个检查

关于java - 当我尝试使用 BufferedReader 跳过多行时,为什么会出现 StringIndexOutOfBoundsException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56918415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com