我的程序需要从一个多行的.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(“[* =]”,“”);真正意味着任何事情,或者它只是在寻找那些字符的全部。任何帮助表示赞赏!
答案 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");
}
}