如何正确分隔一个字符
How to delimit one character properly
我目前有这个代码:
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,.59,Beef,
我的预期输出是 1.59Double Cheesburger
相反,我收到类型不匹配错误,因为当我执行 input.next() 而不是 input.nextDouble() 时,它似乎将令牌扫描为 .59
,而不仅仅是 1.59
就像它应该的那样。
好吧,让我们评估一下你告诉它的内容好吗?
- 每个标记用逗号分隔。
- 通过调用 next double,你已经说过接下来是一个 double。
所以当它一开始看到$
的时候,它就慌了!这个$东西到底是什么东西?这是什么意思?谁是它的神?
你没有告诉它你的双打以美元符号开头。相反,我会将其解析为 String
并按照 this question 将 String
解析为 double
.
注意: double 使用浮点数表示,所以不建议用它来表示货币之类的东西。
编辑
作为对您评论的回应,另一种方法是为您的正则表达式添加另一种可能性。
,\$|,|\n|$
您可以在 this IDEOne 中查看工作示例。
我会做以下事情:
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循环或a来解析每一行正则表达式但是正则表达式很难调试...
我目前有这个代码:
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,.59,Beef,
我的预期输出是 1.59Double Cheesburger
相反,我收到类型不匹配错误,因为当我执行 input.next() 而不是 input.nextDouble() 时,它似乎将令牌扫描为 .59
,而不仅仅是 1.59
就像它应该的那样。
好吧,让我们评估一下你告诉它的内容好吗?
- 每个标记用逗号分隔。
- 通过调用 next double,你已经说过接下来是一个 double。
所以当它一开始看到$
的时候,它就慌了!这个$东西到底是什么东西?这是什么意思?谁是它的神?
你没有告诉它你的双打以美元符号开头。相反,我会将其解析为 String
并按照 this question 将 String
解析为 double
.
注意: double 使用浮点数表示,所以不建议用它来表示货币之类的东西。
编辑
作为对您评论的回应,另一种方法是为您的正则表达式添加另一种可能性。
,\$|,|\n|$
您可以在 this IDEOne 中查看工作示例。
我会做以下事情:
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循环或a来解析每一行正则表达式但是正则表达式很难调试...