我目前有这个代码:
input = new Scanner(new File("src/data/McDonalds Regular.csv"));
input.useDelimiter(",|\\n|$");
String tempChoice = input.next();
double price = input.nextDouble();
System.out.println(price + tempChoice);
输入文件为:
Double Cheeseburger,$1.59,Beef,
我的预期输出为1.59Double Cheesburger
相反,我得到了一个类型不匹配错误,因为当我输入input.next()而不是input.nextDouble()时,它会将标记扫描为$1.59
,而不仅仅是1.59
答案 0 :(得分:1)
好吧,让我们评估一下你们告诉我们的事情吗?
因此,当它在开始时看到$
时,它会感到恐慌!这美元到底是什么东西?这是什么意思?谁是它的神?
你还没有告诉它你的双重开头是一个美元符号。相反,我会将其解析为String
并按照this question将String
解析为double
。
注意:使用浮点表示的双精度,因此不建议用它来表示类似金钱的东西。
修改强>
作为对您的评论的回复,另一种方法是为您的正则表达式增加另一种可能性。
,\\$|,|\\n|$
您可以在this IDEOne中看到一个有效的例子。
答案 1 :(得分:1)
我会执行以下操作:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = null;
try {
input = new Scanner(new File("c://McDonalds Regular.csv"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
input.useDelimiter(",");
String curr = null;
String tempChoice = "";
double price = 0;
while(input.hasNext()){
curr = input.next();
if(curr.startsWith("$")) price = Double.parseDouble(curr.substring(1)) ;
else
tempChoice += curr;
}
System.out.println(price + " "+tempChoice);
}
}
如果稍后使用多行输入,最好使用String的ArrayList来存储输入行并首先在新行“/ n”上拆分,然后用while循环或正则表达式解析每一行但是正则表达式难以调试......