Java打印语句未打印所有变量

Java打印语句未打印所有变量,java,Java,我试图打印文本文件中的一些数据,文件中的数据是这样的 user1.txt 1,1412.0 2,345.0 3,500.0 4,234.0 5 **有人说文本文件可能包含\r**,我将为我的user1.txt文件提供链接 代码: 我的问题是,我需要的输出 Day1:1412.0 cal Day2:345.0 cal Day3:500.0 cal Day4:234.0 cal 但它的输出是 cal cal cal cal

我试图打印文本文件中的一些数据,文件中的数据是这样的

user1.txt

1,1412.0  
2,345.0  
3,500.0  
4,234.0  
5  
**有人说文本文件可能包含\r**,我将为我的user1.txt文件提供链接

代码:

我的问题是,我需要的输出

Day1:1412.0 cal  
Day2:345.0 cal  
Day3:500.0 cal  
Day4:234.0 cal 
但它的输出是

 cal    
 cal    
 cal    
 cal    
 cal    
如果我使用
System.out.println(“Day”+d+:“+c”)它提供正常的输出,如
输出:


我不知道为什么如果我使用
System.out.println(“Day”+d+:“+c+”cal”)
更改
String c=sc.next()
字符串c=sc.nextLine().substring(1)
您将获得以下输出:

Day1:1412.0 cal
Day2:345.0 cal
Day3:500.0 cal
Day4:234.0 cal

正如评论者所观察到的,这几乎肯定是一个问题

OP正在Windows上运行

Windows文本文件的行以\r\n结尾

程序指定了不包含的分隔符\r\n

sc.useDelimiter("[,\n]");
这个分隔符模式就是bug所在的位置

解决方法:在分隔符模式中包含所有空格

sc.useDelimiter("\s+|,");
意思是“任意一串空格或逗号”。或者

sc.useDelimiter("\r?\n|,");

意思是“可选返回,后跟换行符或逗号”。

我怀疑
c
包含回车符。。。我建议您在调试器中运行代码以进行检查。我正在使用catch语句跳过数据文件的最后一行。看起来您的“\n”前面有一个“\r”。这就是文本被覆盖的原因。基本上正如@Jon Skeet所说:)既然您似乎正在从文件中读取整行内容,那么
nextLine()
是否可以使用(while当然应该在
hasNextLine()上触发)?编辑:您仍然需要在逗号上拆分一行,尽管。MC的要点是您通常应该避免使用异常来控制流。Scanner有各种has**()方法来检查流中是否有可用于此目的的其他内容。考虑使用那些来确定你何时到达了数据的末尾。我得到了它,谢谢,但是我可以知道我以前的代码中有什么问题吗?我认为这只是一个bug。看我的答案。哦,现在我非常明白问题是什么了
sc.useDelimiter("\s+|,");
sc.useDelimiter("\r?\n|,");