【问题标题】:Java Scanner delimiter doesn't split the last sectionJava Scanner 分隔符不拆分最后一部分
【发布时间】:2013-08-17 20:14:45
【问题描述】:
/* txt file
Rolling Stone#Jann Wenner#Bi-Weekly#Boston#9000
Rolling Stone#Jann Wenner#Bi-Weekly#Philadelphia#8000
Rolling Stone#Jann Wenner#Bi-Weekly#London#10000
The Economist#John Micklethwait#Weekly#New York#42000
The Economist#John Micklethwait#Weekly#Washington#29000
Nature#Philip Campbell#Weekly#Pittsburg#4000
Nature#Philip Campbell#Weekly#Berlin#6000
*/   


 public class Zines {

            public static void main(String[] args) throws FileNotFoundException {
                Scanner input = new Scanner(new File("txt.file"));
                input.useDelimiter("#|\n|\r|\r\n");

                while(input.hasNext()) {  
                    String title = input.next();
                    String author = input.next();
                    String publisher = input.next();
                    String city = input.next();
                    String line = input.nextLine();
                    //int dist = Integer.valueOf(line);

                    System.out.println(line); 
        }
        }
    }

输出是:

"#9000
"#8000
"#10000
"#42000
"#29000
"#4000
"#6000  

输出 2:

9000
Rolling Stone
("Exception in thread "main") Jann Wenner
Weekly
Washington
4000
Nature

【问题讨论】:

    标签: java file-io java.util.scanner delimiter


    【解决方案1】:

    这里的问题是为什么使用分隔符后#仍然出现?

    因为您正在使用Scanner#nextLine() 阅读最后一部分。它不会考虑分隔符。它将在先前读取的令牌之后读取完整的剩余文本,而不是下一个令牌。

    因此,如果之前读取的令牌是 Boston,则剩余的文本 - #9000 将由 nextLine() 读取。 你应该改用scanner#next()

    String line = input.next();
    

    【讨论】:

    • 替换它!我得到的第一行很好,但是当它重新循环时它搞砸了,我得到的值不正确!我想因为我没有 nextLine() 它错过了行分隔
    • @BlazingApu。是的,这就是问题所在。在这种情况下,您可以更改分隔符。使用像 - #|\n|\r|\r\n 这样的模式。
    • @BlazingApu。不客气 :) 您可以通过单击答案旁边的勾号将答案标记为已接受。
    猜你喜欢
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多