سؤال

My program needs to read from a multi-lined .ini file, I've got it to the point it reads every line that start with a # and prints it. But i only want to to record the value after the = sign. here's what the file should look like:

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

this is what i want it to print:

true
100
false
true

this is my code i'm currently using:

@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) {}
}

I'm not sure if replaceAll("[*=]", ""); truly means anything at all or if it's just searching for all for of those chars. Any help is appreciated!

هل كانت مفيدة؟

المحلول

Try following:

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

Explanation: To process lines only starting with desired character use String#startsWith method. When you have string to extract values from, String#split will split given text with character you give as method argument. So in your case, text before = character will be in array at position 0, text you want to print will be at position 1.

Also note, that if your file contains many lines starting with #, it should be wise not to concatenate strings together, but use StringBuilder / StringBuffer to add strings together.

Hope it helps.

نصائح أخرى

Better use a StringBuffer instead of using += with a String as shown below. Also, avoid declaring variables inside loop. Please see how I've done it outside the loop. It's the best practice as far as I know.

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");
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top