我目前正在尝试在包含以下行的文本文件(sample.text)上运行以下内容:
personPersistenceType = SQLite3的
personDbConnectionString = person.sqlite3
但是我得到了一个StringOutOfBoundsException(结果为-1)。我知道这意味着它无法找到=符号,但我不确定为什么。我试图在=符号之前将所有内容都作为String键,并在=符号后面的所有内容中获取字符串值。
import java.util.Scanner;
public class TextReader {
private Scanner input = new Scanner("sample.txt");
public void loadFile(){
while(input.hasNextLine()){
String line = input.nextLine(); //acquires line
String key = line.substring(0, line.indexOf('=')); //key
String value = line.substring(line.indexOf('=') + 1); //value
config.setProperty(key, value);
}
}
}
答案 0 :(得分:2)
<强>问题:强>
new Scanner("sample.txt");
您在构造函数中传递String而不是文件位置,从而为您提供StringOutOfBoundsException
<强>溶液强>
您需要通过在Scanner
Scanner input = new Scanner(new File("sample.txt"));
顺便说一句,你的实现解析了String。
答案 1 :(得分:0)
首先确保该行包含=
,如果有空行(或没有等号的行),您将获得该异常。
while (input.hasNextLine()){
String line = input.nextLine(); //acquires line
int pos = line.indexOf('=');
if (pos < 0) { // <-- no equal sign, skip the line.
continue;
}
String key = line.substring(0, pos); //key
// Also, need to check if pos + 1 < line.length()
String value = (pos + 1 < line.length()) ? line.substring(pos + 1) : "";
config.setProperty(key, value);
}