如何正确分隔一个字符

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 就像它应该的那样。

好吧,让我们评估一下你告诉它的内容好吗?

  1. 每个标记用逗号分隔。
  2. 通过调用 next double,你已经说过接下来是一个 double。

所以当它一开始看到$的时候,它就慌了!这个$东西到底是什么东西?这是什么意思?谁是它的神?

你没有告诉它你的双打以美元符号开头。相反,我会将其解析为 String 并按照 this questionString 解析为 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来解析每一行正则表达式但是正则表达式很难调试...