【问题标题】:Replacing two characters with one character in a char array用一个字符替换字符数组中的两个字符
【发布时间】:2012-04-18 13:49:48
【问题描述】:

如何用一个字符替换char数组中的两个字符?让我再解释一下。我有一个长度为 n 的字符数组。在这个字符数组中,我想用指定索引i 中的一个字符替换两个字符。在此过程中,数组长度将减少 1。
我想到的想法是,首先创建一个长度为n-1 的新字符数组,然后将索引0 中的所有元素复制到索引ii 不包括)然后在索引i 处插入所需的字符然后将索引i+2(包括i)中的元素复制到索引n-1。但是这个过程需要两次for循环。有没有更好的方法可以有效地做到这一点。

【问题讨论】:

    标签: java arrays replace char


    【解决方案1】:

    或者更有效的方法是使用 StringBuilder,它是 char[] 的包装器,让它为您完成。

    char[] chars = "Hello".toCharArray();
    StringBuilder sb = new StringBuilder();
    sb.append(chars);
    sb.replace(2, 4, "L");
    System.out.println(sb);
    

    打印

    HeLo
    

    您可以查看替换代码以了解它是如何实现的。

    【讨论】:

    • 我可以用 char 数组创建 StringBuilder 实例吗?我手里有 char 数组。
    【解决方案2】:

    使用System.arraycopy() 复制数组部分,而不是遍历其元素。

    【讨论】:

      【解决方案3】:

      鉴于您想要一个新的数组对象,没有比复制每个数组元素一次更快的方法了,所以没有比这更有效的方法了。如果您对System.arraycopy() 使用两次调用,则不必自己编写循环。

      如果您不需要新的数组对象,您可以将编号较高的数组元素向下移动一个,这仅涉及副本数量的一半——但是您将需要跟踪其他方式的长度。

      【讨论】:

      • 好的...我明白了here 非常感谢。
      【解决方案4】:

      它可以使用单个 for 循环。只需输入一个 IF 语句,指示如果迭代 (i) = 您要替换的索引,然后执行不同的操作,而不仅仅是复制。

      基本写成:

      For i = 0 to n - 1
             If i = x then
                   arrayCopy(i) = replaceChars
             Else
                   arrayCopy(i) = arraySource(i)
             End If
      Next
      

      【讨论】:

      • 每次检查从索引0 到索引n-1if 条件也许不会更好。而不是这个,我应该更喜欢从索引0到索引i-1和索引i+1索引n-1的两个for循环(我的意思是System.arraycopy)。这可能会提高性能。如果我错了,请纠正我。
      • ArrayCopy 更好,因为可以用两行代码完成。只是指出可以用单循环来完成。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 2011-11-14
      • 2020-07-12
      • 2020-02-08
      相关资源
      最近更新 更多