扫描仪读取“\ n”或Enter / Return键

时间:2015-06-30 00:53:52

标签: java java.util.scanner

所以,我正在尝试为项目设置一个简单的配置。这里的目标是从文件中读取某些值,如果文件不存在,则写入所述文件。目前,该文件的创建工作正常,但我的扫描仪表现得有点滑稽。当我到达代码时

case“resolution”:resolution = readConfig.next();

它使分辨率的值为“1024x768 \ nvsync”,而它应该只是“1024x768”。如果它按照我的计划工作,那么

的下一个值

readingConfig = readConfig.next();

在我的while循环开头的

将是“vsync”,然后我的switch语句将捕获并继续将值编辑为文件的值。

为什么我的扫描仪会在文本文档的下一行“输入”的“\ n”上接收?

public static void main(String[] args) {
    int musicVol = 0;
    int soundVol = 0;
    String resolution = null;
    boolean vsync = false;
    Scanner readConfig;
    String readingConfig;
    File configFile = new File(gameDir + "\\config.txt");
    if (configFile.exists() != true) {
        try {
            configFile.createNewFile();
            PrintWriter writer = new PrintWriter(gameDir + "\\config.txt");
            writer.write("resolution = 1024x768 \n vsync = true \n music = 100 \n sound = 100");
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    try {
        readConfig = new Scanner(configFile);
        readConfig.useDelimiter(" = ");
        while (readConfig.hasNext()) {
            readingConfig = readConfig.next();
            switch (readingConfig) {
            case "resolution":
                resolution = readConfig.next();
                break;
            case "vsync":
                vsync = readConfig.nextBoolean();
                break;
            case "music":
                musicVol = readConfig.nextInt();
                break;
            case "sound":
                soundVol = readConfig.nextInt();
                break;
            }
        }
        readConfig.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

3 个答案:

答案 0 :(得分:1)

您使用的next()不会划分您的行,请尝试使用nextLine()

  

String nextLine ()使此扫描程序超过当前行和   返回跳过的输入。

我建议不使用分隔符,而是将整行替换为字符串,然后将字符串拆分为所需的部分。

这样的东西
String nextLine = readConfig.nextLine();
String[] split = nextLine.split(" = ");
String resolution = split[1]; // just an example
... 

答案 1 :(得分:1)

您必须使用.hasNextLine()和.nextLine(),而不是使用.hasNext和.next()。我会把它写成评论,但还没有得到代表评论。

答案 2 :(得分:0)

啊,啊哈,解决了!

这样做是将整个文本文件拉成一个字符串(使用Scanner.nextLine()删除'\ n'),然后在每行的末尾添加“=”。因此,当扫描程序在交换机的字符串上运行时,它将忽略“=”并从字符串中提取所需的信息。

    String config = "";
    try {
        readConfig = new Scanner(configFile);
        while (readConfig.hasNext()) {
            config += readConfig.nextLine() + " = ";
            readConfig = new Scanner(config);
        readConfig.useDelimiter(" = ");