如何正确划分一个字符

时间:2015-03-15 19:04:51

标签: java io

我目前有这个代码:

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

2 个答案:

答案 0 :(得分:1)

好吧,让我们评估一下你们告诉我们的事情吗?

  1. 每个标记都以逗号分隔。
  2. 通过拨打下一个双关语,您已经说过接下来会发生的事情是双重的。
  3. 因此,当它在开始时看到$时,它会感到恐慌!这美元到底是什么东西?这是什么意思?谁是它的神?

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