因此,每当我尝试在此特定文本中使用此 ArrayList 时,都会遇到此错误。所以这是问题代码:
public static String lines(int start, int end, InputStream is) {
try {
BufferedReader fileBR = new BufferedReader(new InputStreamReader(is));
List<String> lines = new ArrayList<String>();
String strLine;
StringBuilder tempSB = new StringBuilder();
while ((strLine = fileBR.readLine()) != null) {
lines.add(strLine);
}
for (int i = start - 1; i < end; i++) {
tempSB.append(lines.get(i));
tempSB.append("\n");
}
line = tempSB.toString();
} catch (IOException e) {
e.printStackTrace();
}
return line;
}
我不确定该代码的效率如何,但在我的程序中的一些基本功能关闭后,我将通过并努力提高效率。问题是当我使用它时:
// Edit lines according to where the headerFile starts
public static String getHeaderArt() {
return lines(1, 21, headerFile);
}
// Change to get the introduction text from a file
public static String getIntroText() {
return lines(2, 17, storyFile);
}
public static String getStart() {
return lines(20, 27, storyFile);
}
出于某种原因,前两个代码有效,而第三个代码无效。我的故事情节文件有 28 行,所以我不确定它为什么不起作用。
堆栈跟踪:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 19, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at com.hathorsrpg.DefaultText.lines(DefaultText.java:42)
at com.hathorsrpg.DefaultText.getStart(DefaultText.java:86)
at com.hathorsrpg.Main.intro(Main.java:23)
at com.hathorsrpg.Main.main(Main.java:87)
这是一个 SSCCE,没有文本文件:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class SSCCE {
public static InputStream storyFile = SSCCE.class.getResourceAsStream("/resources/storytext.txt");
public static InputStream headerFile = SSCCE.class.getResourceAsStream("/resources/castle.txt");
public static String line;
public static String lines(int start, int end, InputStream is) {
try {
BufferedReader fileBR = new BufferedReader(new InputStreamReader(is));
List<String> lines = new ArrayList<String>();
String strLine;
StringBuilder tempSB = new StringBuilder();
while ((strLine = fileBR.readLine()) != null) {
lines.add(strLine);
}
for (int i = start - 1; i < end; i++) {
tempSB.append(lines.get(i));
tempSB.append("\n");
}
line = tempSB.toString();
} catch (IOException e) {
e.printStackTrace();
}
return line;
}
// Edit lines according to where the headerFile starts
public static String getHeaderArt() {
return lines(1, 21, headerFile);
}
// Change to get the introduction text from a file
public static String getIntroText() {
return lines(2, 17, storyFile);
}
public static String getStart() {
return lines(20, 27, storyFile);
}
}
感谢您未来的帮助,我似乎无法找出问题所在。如果您想将某些内容放入文本文件中,请执行以下操作: