Java中从字符串中删除字符

29

我想用以下代码删除文件名中的.xml部分:

String id = fileR.getName();
              id.replace(".xml", "");
              idList.add(id);
问题在于它没有删除它,而我不知道为什么它不会删除目标文本。 编辑:实际上我意识到替换函数找不到.xml,所以我的问题是,如何去掉那最后四个字符?
这是传递进来的字符串: 0b14d501a594442a01c6859541bcb3e8164d183d32937b851835442f69d5c94e.xml 谢谢。

可能是重复的问题,参考链接:https://dev59.com/mW455IYBdhLWcg3wCPjh - james.garriss
8个回答

46

Java中的字符串是不可变的。这意味着您需要创建一个新的字符串或覆盖旧的字符串,以实现所需的效果:

id = id.replace(".xml", "");

3
"replace" 不接受正则表达式,因此你不应该对点号进行转义。然而,"replaceAll" 确实接受正则表达式。 - Adam Paynter

11

你不能使用

id = id.substring(0, id.length()-4);

当然,还有Eric所说的。


这意味着他期望字符串以.xml结尾(虽然没有明确说明)。 - Adam Paynter
这就是为什么我提出了问题 ^.^ 但是,当然,Eric的答案看起来更漂亮。 - nhaarman

3

字符串是不可变的,因此当您操作它们时,需要将结果赋值给一个字符串:

String id = fileR.getName();
id = id.replace(".xml", ""); // this is the key line
idList.add(id);

2

String是不可变的。因此,String.replace()不会修改id,而是返回一个新的String,其中包含适当的值。因此,您需要使用id = id.replace(".xml", "");


1
String id = id.substring(0,id.length()-4)

1
如果令牌在字符串末尾,这将安全地删除。
StringUtils.removeEnd(string, ".xml");

Apache StringUtils函数是安全的,可以处理null、空字符串和无匹配情况


8年后......StringUtils也是来自Apache?不是Java本身的......可能需要说明一下。 - RobOhRob
1
添加了文档链接。应该意味着,本地不包含任何Util。这是一个比其他答案更安全、更完整的答案。 - Gibolt
1
并不是说它没有被暗示...我是说因为你没有指明在哪里找到这个函数,所以它并不是很有帮助...但是文档链接肯定可以澄清这一点。 - RobOhRob

0

Kotlin 解决方案

Kotlin 中有一个内置函数可以实现此功能,名为 removeSuffix (文档)

var text = "filename.xml"
text = text.removeSuffix(".xml") // "filename"

如果字符串中不存在后缀,则返回原始字符串。
var text = "not_a_filename"
text = text.removeSuffix(".xml") // "not_a_filename"

你也可以查看类似的 removePrefixremoveSurrounding 函数。


0

Java字符串是不可变的。但是你有很多选择:

你可以使用StringBuilder类,这样你就可以删除任何你想要的内容并控制你的字符串。

使用replace方法。

实际上你还可以使用循环 £:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接