如何解析字符串以获得小数和带正确点的单词?

时间:2015-10-21 00:49:21

标签: java java.util.scanner delimiter

如何区分查找小数的差异,但如果是一个句点,则同时忽略它?

例如,假设扫描程序

String s = "2015. 3.50 please";

当我使用函数scanner.hasNextFloat()时,如何忽略嗨。

我只扫描1行。我需要确定一个单词是字符串,整数还是浮点数。我的最终结果应该是这样的:

This is a String: 2015.
This is a float: 3.50
This is a String: please

但在我使用scanner.hasNextFloat();的条件下,它将 2015。标识为浮动。

3 个答案:

答案 0 :(得分:1)

在Java中,您可以使用正则表达式。一个或多个数字,后跟一个文字点,然后是两个数字。像

这样的东西
String s = "Hi. 3.50 please";
Pattern p = Pattern.compile(".*(\\d+\\.\\d{2}).*");
Matcher m = p.matcher(s);
Float amt = null;
if (m.matches()) {
    amt = Float.parseFloat(m.group(1));
}
System.out.printf("Ammount: %.2f%n", amt);

输出

Ammount: 3.50

答案 1 :(得分:0)

我假设你的意思是java,因为javascript没有扫描仪。

    String s = "Hi. 3.50 please";

    Scanner scanner = new Scanner(s);
    while (scanner.hasNext()){
        if (scanner.hasNextInt()){
            System.out.println("This is an int: " + scanner.next());
        } else if (scanner.hasNextFloat()){
            System.out.println("This is a float: " + scanner.next());
        } else {
            System.out.println("This is a String: " + scanner.next());
        }

    }

输出:

This is a String: Hi.
This is a float: 3.50
This is a String: please

那么,问题是什么?

答案 2 :(得分:0)

您可以使用正则表达式匹配数字

    String[] str = { " Hi, My age is 12", "I have 30$", "Eclipse version 4.2" };
    Pattern pattern = Pattern.compile(".*\\s+([0-9.]+).*");
    for (String string : str) {
        Matcher m = pattern.matcher(string);
        System.out.println("Count " + m.groupCount());
        while (m.find()) {
            System.out.print(m.group(1) + " ");
        }
        System.out.println();
    }

输出:

Count 1 12 Count 1 30 Count 1 4.2

如果数字可以eE,则在模式字符串中添加[0-9.eE]