0

我正在阅读

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

我会遇到一行以“#”开头的行。一旦我打到这条线

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

    }

我想抢四个双打。该行的示例如下所示:

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

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

4

3 回答 3

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++;
        }
    }
}
于 2013-10-08T03:05:28.237 回答
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);
    }
}
于 2013-10-08T03:06:29.230 回答
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("[.]", "");
}
于 2013-10-08T03:12:47.813 回答