我正在搜索具有最大数字大写字母的String数组中的单词

时间:2015-04-18 12:53:12

标签: java arrays string uppercase lowercase

我的数组包含3个元素,描述3个不同的歌手',每个歌手都有一个抽象的字符串方法,它返回歌词'。歌词包含小写和大写字母,拥有最多大写字母的歌手是唱得最响的歌手。下面的方法必须比较这三个歌手和他们的歌词,最响亮的(大写字母数量最多)需要返回,如果有人知道如何解决这个问题,请帮助我。谢谢!

public static String najglosniej(Spiewak[] sp) {

        return " ";
}

2 个答案:

答案 0 :(得分:0)

我将向您解释两种方法,但不会为您编写代码。最基本的是使用命令式编程和循环。也可以使用max的自定义函数。

使用循环

强制获取具有最大计数的元素的主要思想是有一个循环,在该循环中我们计算每个元素感兴趣的计数。我们还有一个存储变量用于当前最高元素和当前最高计数。像max_countmax_element之类的东西。这两个是耦合的(也就是说,为什么命令式方法不是最好的使用方法,但我认为大多数初学者使用的方法;你很容易忘记更新两者中的任何一个并且有错误。)

max_count保存我们在当前迭代中看到的最大计数,max_element该对象为我们提供了当前最大值。如果在一次迭代中,我们看到计数高于max_count,我们同时更新max_countmax_element,以便在所有即将到来的迭代中我们知道当前最高的计数和元素。

在循环结束时,max_element将成为结果。

使用max

阅读代码的一种更简洁的方法是使用Collections.max函数进行自定义比较。通常,人们首先会学习比较元素与内置比较。就像对数字列表进行排序一样,正在使用数值。排序字符串时,使用字母表。但您也可以使用Java中的自定义比较器(例如sortmax)。然后,此自定义比较器检索要比较的两个元素。而不是依赖于内置函数(在Java中将对象转换为字符串表示形式(toString())并按字母顺序进行比较,我认为),您只使用一种计算响度的对象传递给它两位歌手都比较了这些数字。 See this example,员工按工资进行比较。它很像你的问题,只是你需要计算大写字母的数量。

答案 1 :(得分:0)

试试这个(如果我真的了解你):

String[] test = new String[3];
        test[0] = "hello";
        test[1] = "WoRLD";
        test[2] = "WINNER";
        String result = getMaxCapitalLetters(test);
    }

    public String getMaxCapitalLetters(String[] strings){
        Pattern p = Pattern.compile("([A-Z])");
        String winner = null;
        int maxCount = Integer.MIN_VALUE;
        for(String input : strings){
            Matcher m = p.matcher(input);
            int count = 0;
            while(m.find()) {
                count++;
            }
            if (count > maxCount) {
                maxCount = count;
                winner = input;
            }
        }
        return winner;
    }