java - 替换字符串中许多字符的有效方法是什么?

标签 java optimization string

Java 中的字符串处理是我正在努力学习做好的事情。目前我想接受一个字符串并替换我找到的任何字符。

这是我目前效率低下(而且有点愚蠢的 IMO)的功能。它是为了工作而编写的。

public String convertWord(String word)
{
    return word.toLowerCase().replace('á', 'a')
                             .replace('é', 'e')
                             .replace('í', 'i')
                             .replace('ú', 'u')
                             .replace('ý', 'y')
                             .replace('ð', 'd')
                             .replace('ó', 'o')
                             .replace('ö', 'o')
                             .replaceAll("[-]", "")
                             .replaceAll("[.]", "")
                             .replaceAll("[/]", "")
                             .replaceAll("[æ]", "ae")
                             .replaceAll("[þ]", "th");
}

我运行了 1.000.000 次,耗时 8182 毫秒。那么我应该如何继续更改此功能以使其更高效?

找到解决方案:

将函数转换为this

public String convertWord(String word)
{
    StringBuilder sb = new StringBuilder();

    char[] charArr = word.toLowerCase().toCharArray();

    for(int i = 0; i < charArr.length; i++)
    {
        // Single character case
        if(charArr[i] == 'á')
        {
            sb.append('a');
        }
        // Char to two characters
        else if(charArr[i] == 'þ')
        {
            sb.append("th");
        }
        // Remove
        else if(charArr[i] == '-')
        {
        }
        // Base case
        else
        {   
            sb.append(word.charAt(i));
        }
    }

    return sb.toString();
}

运行此函数 1.000.000 次需要 518 毫秒。所以我认为这足够有效。谢谢你们的帮助:)

最佳答案

您可以创建一个长度为 Character.MAX_VALUE 的 String[] 表。 (包括小写的映射)

随着替换变得越来越复杂,执行它们的时间将保持不变。

private static final String[] REPLACEMENT = new String[Character.MAX_VALUE+1];
static {
    for(int i=Character.MIN_VALUE;i<=Character.MAX_VALUE;i++)
        REPLACEMENT[i] = Character.toString(Character.toLowerCase((char) i));
    // substitute
    REPLACEMENT['á'] =  "a";
    // remove
    REPLACEMENT['-'] =  "";
    // expand
    REPLACEMENT['æ'] = "ae";
}

public String convertWord(String word) {
    StringBuilder sb = new StringBuilder(word.length());
    for(int i=0;i<word.length();i++)
        sb.append(REPLACEMENT[word.charAt(i)]);
    return sb.toString();
} 

关于java - 替换字符串中许多字符的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5470630/

相关文章:

perl - 在 Perl 5 中,字符串和数字之间的区别何时重要?

java - 主键是外键的一对一映射 - 需要什么注释

java - 在 ListView 中使用 Picasso

algorithm - 遗传算法的最优参数

php - 使用php将字符串转换为数组

Java - 解析此样本数据的最佳方式

Java - 如何查看一个字符是否与多个字符匹配?

java - 我可以触发 Dropwizard 任务执行吗?

python - 如何根据数据框中的共置约束设置列值?

matlab - 遗传算法模糊推理的优化MF