缓冲读取器找到特定的行分隔符char然后读取该行

时间:2014-01-12 10:56:34

标签: java bufferedreader replaceall

我的程序需要从一个多行的.ini文件中读取,我已经知道了它读取以#开头并打印它的每一行。但我只想在=符号后记录值。这是文件的样子:

#music=true
#Volume=100
#Full-Screen=false
#Update=true

这就是我想要打印的内容:

true
100
false
true

这是我目前正在使用的代码:

@SuppressWarnings("resource")
public void getSettings() {
    try {
        BufferedReader br = new BufferedReader(new FileReader(new File("FileIO Plug-Ins/Game/game.ini")));
        String input = "";
        String output = "";
        while ((input = br.readLine()) != null) {
            String temp = input.trim();
            temp = temp.replaceAll("#", "");
            temp = temp.replaceAll("[*=]", "");
            output += temp + "\n";
        }
        System.out.println(output);
    }catch (IOException ex) {}
}

我不确定是否replaceAll(“[* =]”,“”);真正意味着任何事情,或者它只是在寻找那些字符的全部。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

请尝试以下操作:

if (temp.startsWith("#")){
  String[] splitted = temp.split("=");
  output += splitted[1] + "\n";
}

说明: 要仅使用所需字符开始处理行,请使用String#startsWith方法。如果您有要从中提取值的字符串,String#split将使用您提供的字符作为方法参数来分割给定文本。因此,在您的情况下,=字符前的文字将位于0位置的数组中,您要打印的文字将位于1位置。

另请注意,如果您的文件包含许多以#开头的行,则最好不要将字符串连接在一起,而是使用StringBuilder / StringBuffer将字符串添加到一起。

希望它有所帮助。

答案 1 :(得分:0)

最好使用StringBuffer而不是使用带有String的+ =,如下所示。另外,避免在循环内声明变量。请看看我是如何在循环外完成的。据我所知,这是最好的做法。

StringBuffer outputBuffer = new StringBuffer();
String[] fields;
String temp;
while((input = br.readLine()) != null)
{
    temp = input.trim();
    if(temp.startsWith("#"))
    {
        fields = temp.split("=");
        outputBuffer.append(fields[1] + "\n");
    }
}