从扫描线上抓取双打。

时间:2013-10-08 02:57:16

标签: java double java.util.scanner

我正在阅读

    while(in.hasNextLine()){
       line = in.nextLine();  
    }

我会遇到一条以"#"开头的行。一旦我点击这一行

    if(line.startsWith("#")){

    }

我想抓住线上的四个双打。该行的示例如下所示:

    # should be O: 0.00, A: 0.45, B: 0.35, AB: 0.20

我是Java的新手,我想知道是否有办法扫描这条线路寻找双打,并将它们保存到单独的变量中。

3 个答案:

答案 0 :(得分:2)

    public class Test {
    public static void main(String args[]) {
        String input="# should be O: 0.00, A: 0.45, B: 0.35, AB: 0.20";
        Pattern pattern = Pattern.compile("[0-9].[0-9]{2}");
        Matcher m = pattern.matcher(input);
        int i=0;
        while (m.find()) {
            String str = m.group();
            double value = Double.parseDouble(str);
            System.out.println( "#"+ i + " " + value);
            i++;
        }
    }
}

答案 1 :(得分:2)

您可以使用扫描仪阅读:

Scanner sc = new Scanner(line);
double a = sc.nextDouble();

假设您的输入将采用类似的模式,这是一个解决方案。

public static void main(String[] args) {
    String line = "# should be O: 0.00, A: 0.45, B: 0.35, AB: 0.20";
    Scanner sc = new Scanner(line);
    sc.useDelimiter("\\ |,");
    for (int i = 0; i < 4; i++) {
        while (!sc.hasNextDouble()) {
            sc.next();
        }
        double d = sc.nextDouble();
        System.out.println(d);
    }
}

答案 2 :(得分:0)

执行后,list将包含该行的所有双打。

double[] list = new double[line.length() - line.replace(".", "").length()];

for(int i = 0; i < list.length; i++) {
    int decimalIndex = line.indexOf(".");
    list[i] = Double.parseDouble(line.substring(decimalIndex - 1, decimalIndex + 3));
    line = line.replaceFirst("[.]", "");
}