Java:接受字符串并返回字符以及每个字符出现的方法

时间:2012-07-05 21:50:23

标签: java

我需要完成一个以字符串为例的程序:“Mass”并将返回输出,如下所示:

M:1 A:1 S:2

我需要创建一个只接受一个字符串参数的方法,并返回一个名为Pair的对象数组。对象是我上面输出的对象。 Pair中的每个元素都包含一个字符以及该字符的出现次数。 这是对类:

public static class Pair
    {
        public char _char;
        public int _occurances;

        public Pair(char c)
        {
            _char = c;
            _occurances = 0;
        }

    }

这是我正在研究的方法:

public Pair[] auditString(String input) {


    return Pairs;

}

如果我输入“Mass”并且我的方法返回了一个包含此数据的数组:

如何使此方法auditString正常工作?

对数组将生成3个内存位置

元素0处的

对具有1次出现的字符m, 元素1处的对具有1个出现的字符a,和 元素2处的对具有2次出现的字符

3 个答案:

答案 0 :(得分:1)

由于这是一个家庭作业问题,请考虑以下问题:

  • 您如何分析给定的输入字符串?显然,您必须查看每个字符以计算所需的结果。
  • 你会如何跟踪分数?您可以在遇到角色时创建一个Pair对象,但是当您第二次遇到角色时需要做什么?如何为同一个角色再次获得Pair对象?或者,您也可以为每个字符创建Pair对象,然后通过对多次出现的Pair对象(即对于相同的字符)执行某些操作来找到计算实际答案的方法。

答案 1 :(得分:1)

我假设这是作业,所以我会尽量避免一个过于直接的答案。

我建议考虑这个问题的方法:

  • 什么是字符串?即什么是由?组成的字符串?字符串本质上是数组,所以如果他们要求你在int s数组中记录数字的频率,你会如何解决这个问题呢?这个问题的解决方案在逻辑上是相同的。

  • 考虑逐个浏览String的每个'piece'。如何使用“配对”课程,以便始终可以通过这种方式跟踪字母频率?

  • 想象一下,在您访问的每封信中,您完全忘记了String的其余部分。 Pair类的哪些特性(不太具体,一般的对象)会让你用这么少的“知识”解决问题?

  • 首先忽略“配对”对象,如果它让你感到困惑的话。首先尝试并降低逻辑。如果您可以在脑中或纸上逻辑思考解决方案,那么Pair对象的使用应该变得非常清楚。

希望有所帮助!

答案 2 :(得分:0)

public Pair[] GetLetterPairs(String str)
{
    HashMap<Character, Integer> map = new HashMap<Character, Integer>();

    str = str.toLowerCase();

    for(char c : str.toCharArray())
    {
        if(!map.containsKey(c))
            map.put(c, 1);
        else
        {
            int value = map.get(c);
            map.put(c, ++value);
        }
    }

    Pair[] pairs = new Pair[map.size()];
    int i = 0;
    for(Entry<Character, Integer> entry : map.entrySet())
    {
        pairs[i] = new Pair(entry.getKey(), entry.getValue());
        i++;
    }

    return pairs;
}