Java 8中数字与字符串长度的比率

时间:2014-01-03 13:04:30

标签: java java-8

我过去一直在阅读有关Java 8的内容,我知道它支持流,但我还没有对它进行过那么多的研究。

我想知道我的代码在Java 8中有多清晰。

我有以下内容:

public static float ratioNumbers(final String input) {
    int countNumbers = 0;
    for (char c : input.toCharArray()) {
        countNumbers += (c >= '0' && c <= '9') ? 1 : 0;
    }
    return countNumbers * 1.0f / input.length();
}

写这个最简洁的方法是什么?仍然保持适当的意图。

2 个答案:

答案 0 :(得分:5)

我会这样做:

 public static float ratioNumbers(final String input) {
    return input.chars().filter(c -> Character.isDigit(c)).count()/(float)input.length();
 }

您也可以使用正则表达式删除所有非数字字符,而不是使用流:

public static float ratioNumbers(final String input) {
    return input.replaceAll("[^\\d.]", "").length()* 1.0f/input.length();
}

答案 1 :(得分:5)

您可以执行以下操作:

long numberOfDigits = input.codePoints().filter(Character::isDigit).count();
return 1f * numberOfDigits / input.length();