java字符串替换和内存

时间:2014-02-26 06:44:16

标签: java string

如果我有一个Java代码段,例如:

String description = someFunctionCall();

anotherFunction( description.replace(",", " " ).replace( ".", " " ) );

创建了多少字符串以便以后进行垃圾回收,如何使多次替换更有效?

5 个答案:

答案 0 :(得分:2)

String.replace(char,char)仅在实际发生替换时才创建新字符串。

如果你需要替换一组有限的字符,或者你需要为不同的输入字符使用不同的替换,那么你应该使用StringBuilder并使用StringBuilder.charAt()和StringBuilder.setCharAt()方法手动迭代它。个人的角色。除StringBuilder本身和生成的String之外,此方法不会创建任何其他对象。

您可以使用String.replaceAll(正则表达式,替换),甚至可以通过Pattern.compile(正则表达式)预编译正则表达式,然后重复使用Pattern对象,如pattern.matcher(inputString).replaceAll(replacement)。这种方法允许您在一次调用中执行替换,但它会在引擎盖下创建许多其他符合gc条件的对象。

答案 1 :(得分:0)

创建字符串对象取决于字符串中的可替换字符。

您可以使用replaceAll()在一个语句中替换,.

description=description.replaceAll("[,.]","");

答案 2 :(得分:0)

为了有效,您应该使用description.replace(',', ' ' ).replace( '.', ' ' )代替。然后,如果没有','或'。'在描述中不会创建新的String,否则replace会创建一个新的String。

description.replaceAll("[,]", " " )将使用Pattern,并且会创建更多对象

答案 3 :(得分:0)

你可以使用replaceAll(regex,replacment); String的函数,它接受正则表达式并用提供的字符串替换所有出现的内容。它在堆中创建字符串并为您提供最后一个字符串(即输出)

请参考这个 Difference between , java string replace() and replaceAll()

答案 4 :(得分:0)

一旦您为String分配了一个值,该值就永远不会改变 - 它是不可变的。

好消息是String对象是不可变的,它的引用变量是 不,所以继续你的代码:

1)VM取description的值,用,替换" "给我们一个新值。 2)再次使用新字符串description,用.替换" "给我们另一个新值。

由于字符串是不可变的,因此VM无法将此新值填充到引用的旧String中 按description,因此它创建了一个新的String对象,为其赋予了新值,并使description引用它。

此时我们将有3个对象,

第一个 - 我们创造了 第二个 - ,替换为" " 第三个 - .替换为" "