如何获取字符串的最后一个字母而不是整个字符串

时间:2018-01-10 00:19:18

标签: java string java-8 java-stream

我目前有一个函数,它搜索一个字符串数组并接受一个char参数,并返回一个int信号,表示以给定字符结尾的出现次数,我需要对其进行修改,以便它只计算以该字符结尾的出现次数具体人物。

例如:

如果我有Luke和Jen而我正在寻找'e',那么输出将是一个,因为luke是唯一一个以'e'结尾的

这是我目前的代码。

public int countFirstNameOccurrences(char c) {
        return Reg.stream()            // get Stream<Name>
                .map(Name::getFirstName) // convert Stream<Name> to Stream<String> using Name's firstName
                .mapToInt(s -> s.length() - s.replace(String.valueOf(c), "").length()) // calculate every occurrence c in each firstName and get an IntStream
                .sum();                  // sum all the values
    }

2 个答案:

答案 0 :(得分:3)

要么:

public int countFirstNameOccurrences(char c) {
        String character = String.valueOf(c); // character represented as a String
        return Reg.stream()  // Stream<Name>
                  .map(Name::getFirstName) // Stream<String>
                  .mapToInt(n -> n.endsWith(character)? 1 : 0) // IntStream
                  .sum(); // int
}

或正如Alexis所建议的那样,但您需要转发int,因为count会返回long类型。

public int countFirstNameOccurrences(char c) {
        return (int)Reg.stream() //Stream<Name>
                       .map(Name::getFirstName) // Stream<String>
                       .filter(n -> n.charAt(n.length() -1) == c) // Stream<String>
                       .count(); // long
}

答案 1 :(得分:0)

我知道你有一个接受的答案,但不幸的是有些人被迫使用低于8的Java版本,所以这里可以选择不使用流:

public static int count(char c) {
    int count = 0;
    for (String name : names) {
        if (name.charAt(name.length() - 1) == c) {
            count++;
        }
    }
    return count;
}

简单示例here