java – 按字母顺序排序字符串 – 我是否错过了一些明显的东西?

public class Anagram {
    public static void main(String[] args) {

        String a = "Despera tion-".toLowerCase();
        String b = "A Rope Ends It".toLowerCase();

        String aSorted = sortStringAlphabetically(a);
        String bSorted = sortStringAlphabetically(b);

        if(aSorted.equals(bSorted)){
            System.out.println("Anagram Found!");
        }else{
            System.out.println("No anagram was found");
        }

    }

    public static String sortStringAlphabetically(String s) {

        char[] ca = s.toCharArray();
        int cnt = 0;
        ArrayList al = new ArrayList();

        for (int i = 0; i < ca.length; i++) {
            if (Character.isLetter(ca[cnt])) 
                al.add(ca[cnt]);

            cnt++;
        }

        Collections.sort(al);
        return al.toString();
    }
}

作为一个学习者,我破解了这个布尔Anagram检查器.我选择的解决方案是创建一个sortStringAlphabetically方法似乎只是做太多类型 – 玩杂耍的字符串 – > chars [] – > ArrayList – > String – 假设我只想比较2个字符串来测试一个短语是否是另一个短语的字谜 – 我可以用较少的类型杂耍来完成它吗?

ps导师解决方案距离我的尝试还有一英里远,并且由于很多原因可能要好得多 – 但我真的想要掌握所有不同的Collection类型.

http://www.home.hs-karlsruhe.de/~pach0003/informatik_1/aufgaben/en/doc/src-html/de/hska/java/exercises/arrays/Anagram.html#line.18

编辑

FTW在这里是最初的挑战,我意识到我已经离开了解决方案.

http://www.home.hs-karlsruhe.de/~pach0003/informatik_1/aufgaben/en/arrays.html

我最初的膝盖反应是简单地通过阵列a工作,淘汰那些与阵列b匹配的字符 – 但这似乎要求我在每次迭代时重建阵列 – 非常感谢你为教育我所做的一切努力.

最佳答案
如果使用此算法,有不同的方法可以改善这一点.
首先,您不一定需要创建字符数组.您可以使用String.charAt()来访问字符串的特定字符.

其次,您不需要列表.如果您使用了SortedMultiSet或SortedBag,则只需按排序顺序添加内容即可.如果编写一个从字符串创建SortedMultiSet的函数,则只需比较这些集合而不重建字符串.

注意:我不知道您允许使用哪些库(Google和Apache都有这些类型),但您可以随时“酿造自己的”.

此外,请确保为您的类型使用泛型.恕我直言,定义ArrayLists是非常危险的.

转载注明原文:java – 按字母顺序排序字符串 – 我是否错过了一些明显的东西? - 代码日志