gpt4 book ai didi

java - Java String 如何在内部删除所有非数字工作?

转载 作者:行者123 更新时间:2023-12-01 18:39:16 25 4
gpt4 key购买 nike

由于字符串是不可变的,我必须编写如下以从字符串中删除所有非字母数字。

void test(String str) {
str = str.replaceAll("[^a-zA-Z0-9\\s]", "").toLowerCase();
System.out.println("\n" +str);
}

我不明白的是,它如何通过重新分配给 str 来工作?

由于 String 是不可变的,我知道如果我将它分配给一个新的 String newString,它们会指出两个不同的对象,str 和 newString。也就是说,原始字符串指向 str ,修改后的字符串指向 newStr ,它们有两个不同的不可变字符串。这对我来说没问题。

void test(String str) {
String newStr = str.replaceAll("[^a-zA-Z0-9\\s]", "").toLowerCase();
System.out.println("\n" +newStr);
}

但是如何通过重新分配给同一个 str 对象来工作呢?根据我的理解,它不应该工作,因为 immutable str 无法修改,因此修改后的 str 的结果不能存储在 immutable str 中。

void test(String str) {
// this shouldn't be working based on my understanding. But it works. Why?
str = str.replaceAll("[^a-zA-Z0-9\\s]", "").toLowerCase();
System.out.println("\n" +str);
}

如下图所示,string1 和 string2 指向堆中的同一个 String 对象。您能解释一下它的内部工作原理吗?

最佳答案

您没有分配给同一个 str 对象。

看一下replaceAll等方法,你会发现它们返回String,这是replaceAll方法创建的一个新的String对象。

因此 str=str.replaceAll()str 获取 String 引用,调用 replaceAll()在那个字符串中。 replaceAll 处理 this,然后返回一个包含处理结果的新 String 对象。然后,您将其分配回原始引用。

关于java - Java String 如何在内部删除所有非数字工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20605909/

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