Java来检查字符串是偶数(FFHHIIJJ,uuurroor,…)还是奇数(iirelo,ppgiuuus,…)

Java来检查字符串是偶数(FFHHIIJJ,uuurroor,…)还是奇数(iirelo,ppgiuuus,…),java,string,java-8,Java,String,Java 8,在java中,我需要检查给定的字符串是偶数还是奇数 偶数字符串的字符数HHEEPPDIDI、LLLQQMM、,。。。 奇数字符串的字符数HRTRDFF、HIYUDHDA、 我尝试计算每个字符的出现次数,并将该值放入一个INT变量中,然后比较INT变量的值。但它看起来不像一个有效的代码 int frequency = 0; for(int i = 0; i < str.length(); i++) { if(ch == str.charAt(i)

在java中,我需要检查给定的字符串是偶数还是奇数

偶数字符串的字符数HHEEPPDIDI、LLLQQMM、,。。。 奇数字符串的字符数HRTRDFF、HIYUDHDA、

我尝试计算每个字符的出现次数,并将该值放入一个INT变量中,然后比较INT变量的值。但它看起来不像一个有效的代码

  int frequency = 0;

        for(int i = 0; i < str.length(); i++) {
            if(ch == str.charAt(i)) {
                ++frequency;
            }
像这样我们可以计算每个字符并比较它们的值。但是我想知道是否有其他简单的方法,或者我们可以使用任何内置的方法来实现它。我们最多可以使用Java8版本。
非常感谢您提供的任何帮助。

您可以迭代输入字符串,并将每个字符添加到数据结构HashMap中,增加计数器

import java.util.HashMap;

public class A02 {

public static void main(String[] args) {

    System.out.println(new A02().new Solution().check("HHEEPPDIDI"));
    System.out.println(new A02().new Solution().check("HHEEPPDID"));
    System.out.println(new A02().new Solution().check("HRTRDFF"));
}

class Solution
{
    HashMap<Character,Integer> hm = new HashMap<>();

    public String check(String s)
    {
        for(int i=0;i<s.length();i++)
        {
            if(hm.get(s.charAt(i))==null)
            {
                hm.put(s.charAt(i), 1);
            }
            else
            {
                hm.put(s.charAt(i),hm.get(s.charAt(i))+1);
            }
        }
        int first = 0;
        for(Character c : hm.keySet())
        {
            if(first==0) first=hm.get(c);
            if(first !=hm.get(c)) return "odd:"+s;
        }
        return "even:"+s;
    }
}
}
空输入的输出: 甚至:

那么在Java8或更高版本中,是否有任何字符串API方法 将简化要求

如果愿意,在Java 8及更高版本中,可以使用流API,首先用于在Java 9中从str.chars开始构建计数映射,其次用于确定映射是否包含不同的计数。你是否认为它更简单可能是一个口味的问题,我可能会认为它更先进,喜欢它。

您可以在web和堆栈溢出中搜索详细信息。如果你被卡住了,请发布一个新问题,我们是来帮助你的

编辑:我想现在你已经有时间写你自己的代码了,所以如果你想比较的话,我会发布我的代码给你,而不会带走你的乐趣和学习

public static boolean isEven(String s) {
    if (s.isEmpty()) {
        return true;
    }
    Map<Integer, Long> counts = s.chars()
            .boxed()
            .collect(Collectors.groupingBy(ch -> ch, Collectors.counting()));
    Long someCount = counts.values().iterator().next();
    return counts.values()
            .stream()
            .allMatch(someCount::equals);
}
输出为:


如果我理解正确,我相信你的方法是最有效和最简单的方法:数一数每个字符。比较计数。如果两个计数不同,则字符串为奇数,否则为偶数。如果需要,您可以搜索如何计算字符串中每个字符的出现次数,之前已经询问并回答过多次。欢迎使用堆栈溢出。由于堆栈溢出不是一种代码编写,甚至不是一种算法设计服务,所以我投票结束这个问题,因为它太宽泛了。这不是邪恶的意志,更重要的是广泛的问题在这里往往不起作用:它们通常要么得不到答案,要么得不到好的答案,要么得不到对其他读者有用的答案。顺便说一句,你提供了很好的例子。一开始我不明白你是如何定义偶数和奇数字符串的,但是你的例子回答了我所有的问题,消除了我的疑虑。这是一个很好的算法和代码。我的保留意见是,如果这可能是学校作业,你帮助太多了,也就是说,学生不需要自己解决作业,但他会从中学到更多。Thx@奥列夫。是的,你也许是对的。这可能是为了学校,但至少如果你能理解当时所做的是一个进步。有时,即使是完整的例子也很好。他正在尝试一些东西……如果字符串包含许多不同的字符,那么在最后迭代地图的值集,而不是我们不介意的学校作业的键集,效率会更高,只需注意,对于生产代码,这可能是一个考虑因素。@OleV.V。是的,真的,我也很乐意帮忙。其主要思想是,您应该在字符串中迭代一次,然后计算发生次数。在java 8中,有用于迭代的流类,有用于分组的各种方法和收集器。计数器。如果需要其他解决方案,可以去检查一下。简单的解决方案总是很好的尝试第一和之后,你可以提高他们的需要。祝你好运当然。非常感谢你宝贵的时间。
public static boolean isEven(String s) {
    if (s.isEmpty()) {
        return true;
    }
    Map<Integer, Long> counts = s.chars()
            .boxed()
            .collect(Collectors.groupingBy(ch -> ch, Collectors.counting()));
    Long someCount = counts.values().iterator().next();
    return counts.values()
            .stream()
            .allMatch(someCount::equals);
}
    for (String s : new String[] {
            // Even strings
            "FFHHIIJJ", "UUURROOOR", "HHEEPPDIDI", "LLLQQMQMM", "abaccb", "abc", "d", "",
            // Odd strings
            "IIREELO", "PPGIUUUUS", "HRTRDFF", "HIYUDHDA", "abbc", "aabcc" }) {
        System.out.format("%-11s %b%n", s, isEven(s));
    }
FFHHIIJJ    true
UUURROOOR   true
HHEEPPDIDI  true
LLLQQMQMM   true
abaccb      true
abc         true
d           true
            true
IIREELO     false
PPGIUUUUS   false
HRTRDFF     false
HIYUDHDA    false
abbc        false
aabcc       false