如果字符串和数字在同一行,是否可以读取它们(从TXT文件中)。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果字符串和数字在同一行,是否可以读取它们(从TXT文件中)。相关的知识,希望对你有一定的参考价值。
我很难写出我问题的题目。
在我给定的作业中,我需要写一个程序,从一个文本文件中读取数据。
例如:(这是在文本文件中,数字是商品的价格。
Cappuccino, 3.50
Espresso, 2.10
Mochaccino, 5.99
Irish Coffee, 7.99
Caffe Americano, 6.40
Latte, 1.99
这是我读取文本文件的代码。
public void readFile(){
while(x.hasNext()){
String item = x.next();
Double price = x.nextDouble();
System.out.printf("%s $%.2f
", item, price);
}//end of whileLoop
}
public void closeFile(){
x.close();
}
我的输出
Cappuccino, $3.50
Espresso, $2.10
Mochaccino, $5.99
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
at ReadTextFile.readFile(MiniProject.java:22)
at MiniProject.main(MiniProject.java:400)
我的输出: 代码工作得很好,也很正常,直到它读到一个菜单项,其中有两个字,而不是一个单字,我怎样才能改变我的代码,在读价格之前读出两个字?
下面是一个视频,我希望我的程序能够读取文件--。https:/youtu.begIMxwKc-pw8
由于项目名称可以是多个单词,我建议使用一种叫做split()的方法。这样就会根据某个字符串进行拆分,并返回一个数组,将字符串中被拆分的部分按你给该方法的值进行拆分。例如,"I do,a".split(",")将在逗号后的空格上进行分割,并返回数组["I do","a"]。在你的例子中,你要执行这个操作的字符串将通过使用scan.nextLine()获得。然后你就有了第一部分和你感兴趣的第二部分。要将数组中的第二个元素转换为双数,你可以使用Double.parseDouble(arr[1])。
这段代码就可以了。
public void readFile(){
while(x.hasNextLine()){
String[] nextLineArr = x.nextLine().split(", ");
String item = nextLineArr[0];
double price = Double.parseDouble(nextLineArr[1]);
System.out.printf("%s $%.2f %n", item, price);
}//end of whileLoop
}
这段代码的作用是: Scanner
类将读作'tokens'。当你调用 nextDouble
它将读取一个标记,而不关心它是一个双数还是一个字符串或其他什么,然后将尝试将其转换为双数。如果成功了,那就是你所得到的。如果不成功,你会得到一个 InputMismatchException
.
所以,你想在这里完成的就是 Irish Coffee
是一个单一的标记(也可能是你的代码已经更新,以继续读取标记并将它们连接起来,这听起来更复杂)。此外,那个逗号在你的字符串中,我敢打赌,你不希望这样。
扫描器的工作原理是通过使用一个符号来分隔标记。定界符. 通常情况下,定界符是 "任意数量的空白"(所以,空格和换行符)。
听起来你需要的是重新定义定界符。要么是逗号,要么是任意数量的空格,要么是换行。
scanner.useDelimiter("(\s*,\s*)|
?
");
就可以了 中间那个乱七八糟的东西是一个regex。这个是这样的。要么是[a]任意数量的空格,要么是逗号,要么是任意数量的空格,要么是[b]换行。
以上是关于如果字符串和数字在同一行,是否可以读取它们(从TXT文件中)。的主要内容,如果未能解决你的问题,请参考以下文章