【问题标题】:Efficiency - Replacing word in middle of sentence效率 - 替换句子中间的单词
【发布时间】:2014-02-27 18:27:03
【问题描述】:

我的问题是我有一个大字符串,我想将所有“i”更改为“I”。但是我不能足够有效地做到这一点。我知道以前有人问过关于替换部分字符串的问题,但我不确定最快的方法是什么。

我尝试过的一些:

一)

if (question.charAt(i)=='i' && question.charAt(i+1)==' ')
{
   question = question.substring(0,i) + 'I' + question.substring(i+1);
}

b)(比尝试 a 慢 100-200 倍)

question = question.replace("i ", "I ");

c)(比尝试 a 慢大约 100 倍)

question = question.replaceAll("i ", "I ");

我从来没有做过高效的编程,而且这些都没有降低我需要的效率。有没有我不知道的更快的方法?

【问题讨论】:

  • 一般来说,对于一个中等长度的字符串,使用任何机制的扫描成本都会被分解和重组 String 对象。
  • 请注意,您上面的示例是将苹果与橙子进行比较,因为第一种情况不会扫描以查找要替换的位置。
  • 我希望您在像这样进行微基准测试时注意预热 JVM 并获取大量运行的平均值。众所周知,微基准测试很难正确。

标签: java string search performance


【解决方案1】:

一个应该比你的解决方案更有效(已经非常有效)的解决方案如下。

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

    char[] charArr = word.toCharArray();

    for(int i = 0; i < charArr.length; i++)
    {
        // Single character case
        if(charArr[i] == 'i' && (i+1 < charArr.length)  && charArr[i+1] = ' ')
        {
            sb.append('I');
        }
        else
        {   
            sb.append(word.charAt(i));
        }
    }

    return sb.toString();
}

【讨论】:

  • 重新阅读答案后:i++ 匹配时,因为您明确知道下一个字符是' '
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
相关资源
最近更新 更多