子字符串的StringOutOfBoundsException

时间:2014-07-29 02:51:12

标签: java

我目前正在尝试在包含以下行的文本文件(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);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

<强>问题:

new Scanner("sample.txt");

您在构造函数中传递String而不是文件位置,从而为您提供StringOutOfBoundsException

<强>溶液

您需要通过在Scanner

的构造函数中传递File类来在扫描程序中添加文件位置
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);
}