java - 邮件内容需要用字典里的词过滤掉

标签 java algorithm string

我在面试中被问到一个问题。问题是输入字符串(可能来自电子邮件或大文本文件)需要用坏词列表过滤并替换为其他内容。

例如,如果输入字符串包含存在于坏词列表中的坏词,则需要将坏词替换为其他内容,例如空字符串或通配符。

我想出的解决方案是将所有坏词放入一个 hashmap 中,并将输入字符串放入一个 StringBuffer 中,并按空格分隔的单词检索单词,并检查 hashmap 中是否存在单词,如果存在,则替换单词带空字符串。但是面试官说操作StringBuffer可能代价高昂,因为stringBuffer维护的是一个字符数组。替换意味着它需要复制到一个新的阵列。

有没有人有更好的算法来代替这个解决方案?

谢谢。

最佳答案

你可以先解析String进入String[] (使用 split() )并遍历单词并通过在 HashMap<String,String> 中查找单词来检查是否需要替换单词列入黑名单的词。 (如果是,您只需将引用替换为“替换为”[映射中字符串的值],而不创建新字符串)。然后,使用 StringBuilder , 重建你的新字符串。

应该看起来像这样:

public static String replaceString(Map<String,String> map,String input) { 
    String[] arr = input.split("\\s");
    for (int i = 0;i<arr.length;i++) { 
        String val = map.get(arr[i]);
        if (val != null) arr[i] = val;
    }
    StringBuilder sb = new StringBuilder();
    for (String s : arr) {
        if (s == null || s.length() == 0 ) continue;
        sb.append(s).append(' ');
    }
    return sb.toString().trim();
}

关于java - 邮件内容需要用字典里的词过滤掉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6559010/

相关文章:

multithreading - 如何在 python 中处理大文件?

r - 如何根据 r 中的备用分隔符折叠字符串

c - Nicelabel 算法超过 MAX TICKS

algorithm - 如何在不同目录的多个图像中读取和运行算法?

c++ - 声明 vector 字符串数组 C++ 时出现段错误

arrays - 我可以将看起来像数组内容的字符串转换为数组吗?

java - 在黑莓中显示 URL 中的图像

java - 这个概念叫什么,来自哪个版本的java

java - 路线 [product.store] 未定义。 (查看: C:\xampp\htdocs\hijabrent\resources\views\product\create. blade.php)

java - 根据路径检索值的查找库