当前位置:  开发笔记 > 编程语言 > 正文

用其全貌替换缩写/俚语

如何解决《用其全貌替换缩写/俚语》经验,为你挑选了1个好方法。

我使用HashMap存储缩写的完整表单.

public class Test {
    public static void main(String[] args) {
        Map slangs = new HashMap();
        slangs.put("lol", "laugh out loud");
        slangs.put("r", " are ");
        slangs.put("n", " and ");
        slangs.put("idk", " I don't know ");
        slangs.put("u", " you ");
        Set set = slangs.entrySet();
        Iterator i = set.iterator();

        String sentence = "lol how are you";
        StringBuilder sb = new StringBuilder();

        for (String word : sentence.split(" ")) {
            while(i.hasNext()) {
                Map.Entry me = (Map.Entry)i.next();
                if (word.equalsIgnoreCase(me.getKey())) {
                    sb.append(me.getValue());
                    continue;
                }
                sb.append(word);
            }
        }
        System.out.println(sb.toString());
    }
}

输出是:

lollollollaugh out loudlol

这里有什么问题,如何解决?



1> Nicolas Filo..:

你不应该来遍历条目找到匹配,你应该使用get(Object key)getOrDefault(Object key, V defaultValue)得到一个给定的缩写的完整形式,否则,而不是让你充满形式的时间复杂度O(1),你会用得到它O(n)这在表演方面当然不是很好,你会失去把你的键/值对放在一起的真正好处Map.如果您因为这种情况而这样做,只需将您的密钥仅以小写字母放在地图中并打电话getgetOrDefault使用小写字样如下:

所以你的循环应该是这样的:

for (String word : sentence.split(" ")) {
    // Get the full form of the value of word in lower case otherwise use
    // the word itself
    sb.append(slangs.getOrDefault(word.toLowerCase(), String.format(" %s", word)));
}

输出:

laugh out loud how are you

使用Stream API,它可能只是:

String result = Pattern.compile(" ")
    .splitAsStream(sentence)
    .map(word -> slangs.getOrDefault(word.toLowerCase(), word))
    .collect(Collectors.joining(" "));

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有