gpt4 book ai didi

java - 字符串中的字符替换需要很长时间

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:14:48 25 4
gpt4 key购买 nike

我正在尝试替换字符串中的单个字符(位),它是一个二进制数。对于位替换,我设计了一种方法,它简单地使用 string.substring() 方法根据给定索引对字符串进行分区,然后将所有字符串连接起来。下面是方法-

    /*
*Method will replace the index-th bit with bitToInsert in the given str
*/
String str = "11000110100110011111";
int index = 5;
int bitToInsert = 0;
if (index == 0) {
str = str.substring(0, str.length() - 1) + bitToInsert;
} else {
str = str.substring(0, str.length() - index - 1) + bitToInsert + str.substring(str.length() - index);
}

这很好用,但是当给定的 str 非常大时,这会花费很多时间来替换一个位。有没有其他方法,可以比上述方法在更短的时间内完成任何位的替换?

最佳答案

您看到的性能问题是因为 Java 字符串不可变。换句话说,字符串一旦创建就不能更改。因此,要更改字符串中的一个字符,JVM 必须复制整个字符串,如果它是一个大字符串,这将需要一段时间。

在上面的代码中,它实际上比那个更糟糕,因为你正在复制字符串的第一部分和字符串的第二部分,除了一个字符,然后必须将这些副本复制到最终结果中.如果上面的代码通过 using a StringBuilder 可以提高性能构建目标字符串,因此您只需复制一次。

如果你真的要处理一个长二进制数,你应该考虑 using a BitSet .这对您的效果如何将取决于您在翻转一些位后对数据执行的操作。

 String str = "11000110100110011111"; 
BitSet bitSet = new BitSet(str.length());

//All bits are unset at first so set any that correspond to a '1' in the String
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '1') {
bitSet.set(i);
}
}

int index = 5;
boolean bitToInsert = false; //i.e. 0
bitSet.set(index, bitToInsert);

关于java - 字符串中的字符替换需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9841451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com