Java 删除/忽略给定字符串中的所有标点符号
我正在尝试删除字符串中的每个标点符号:到目前为止,我已完成以下操作:Java 删除/忽略给定字符串中的所有标点符号,java,Java,我正在尝试删除字符串中的每个标点符号:到目前为止,我已完成以下操作: String line = "there's, isn't"; line.replaceAll("\\p{Punct}", "") 然而,这不能将“有”改为“有”或“没有”改为“没有” 我认为\p{Punct}包含所有标点符号,包括“'”(如api中所示),但这不起作用。有人能帮忙吗 提前谢谢 PS:预期的结果是:在Java中没有不可变的字符串。String方法不会就地更改字符串,而是返回字符串的修改副本,因此需要将结果赋
String line = "there's, isn't";
line.replaceAll("\\p{Punct}", "")
然而,这不能将“有”改为“有”或“没有”改为“没有”
我认为\p{Punct}包含所有标点符号,包括“'”(如api中所示),但这不起作用。有人能帮忙吗
提前谢谢
PS:预期的结果是:
在Java中没有不可变的字符串。String方法不会就地更改字符串,而是返回字符串的修改副本,因此需要将结果赋回变量:
String line = "there's, isn't";
line = line.replaceAll("\\p{Punct}", "");
System.out.println(line); // theres isnt
正如前面的回答所说,字符串是不可变的,一旦创建,就无法真正更改它。所以,一旦你像String line=“有,不是”代码>将创建字符串对象“有,没有”
,并将行
变量分配给它。Java没有指针的概念,但您可以将其视为指向给定字符串的变量。现在,您的下一行line.replaceAll(“\\p{Punct},”)
返回一个新创建的字符串对象。您可以将其分配给另一个变量,例如line\u cleared=line.replaceAll(“\\p{Punct}”,“
”,然后打印出来:下面是完全更新的代码:
String line = "there's, isn't";
line_cleared= line.replaceAll("\\p{Punct}", "");
System.out.println(line_cleared);
如果输入有,不是吗,您的预期输出是什么?如果您想将is not
之类的收缩变换为is not
,您将需要做更多的工作。我的预期输出是“theres not”答案是正确的,但它与不变性无关。@AniketSahrawat当然有。字符串方法不会因其不变性而更改字符串,而是返回字符串的修改副本。这只是一个赋值问题。没有赋值。虽然这是正确的字符串方法,但不会更改pla中的字符串但这并不是因为它们是不可变的。所以,根据您的说法,在设计语言时,还有哪些其他的设计考虑因素使得字符串操作不会对字符串本身进行操作,我能想到的最大原因是引用原始字符串并将其与替换的字符串进行比较。就像Git版本c一样比较。我也不知道你认为你评论的链接有什么相关性。你能解释一下吗?