【发布时间】:2022-11-03 13:54:12
【问题描述】:
我有一个字符串
"apples, pears # and bananas\\ngrapes\\nbananas !apples"
我想删除字符串子字符串# and bananas。
private static String cleaned(String main, String substring) {
return main.replace(substring, "");
}
但是replace 方法不起作用。我觉得这与# 有关,因为如果我尝试使用main.indexOf("#") 获取# 的索引,我会得到-1。
当我像这样直接调用方法时
System.out.println(cleaned("apples, pears # and bananas\\ngrapes\\nbananas !apples", "# and bananas"));
它出人意料地有效我得到了正确的答案
**apples, pears \ngrapes\nbananas !apples**。但是,当我从像这样的另一种方法以编程方式调用该方法时
public static String stripComments(String text, String[] commentSymbols)
//some code
return cleaned(stringBuilder.toString(), textAfterComment.toString());
}
它不会产生正确的答案。我得到**apples, pears and bananas\ngrapes\nbananas**
为什么我得到 -1 表示未找到 # 但它显然在字符串中?以及如何使用或不使用 replace 方法删除子字符串?
【问题讨论】:
-
我在我身边测试过,你的代码有效
-
您收到的字符串中的字符是否有可能与您使用键盘输入的编码不同?您可以通过在此处对 2 个字符串进行编码来检查:browserling.com/tools/utf8-encode 顺便说一下,我已经检查了您在问题中包含的这个字符串,但我假设您的实际字符串不同。
-
有一些similar Unicode characters for
#。看到以下代码,您可能没有犯下初学者的错误:s.replace(u, v); System.out.println(s);(缺少分配)。 -
@JoopEggen 如果您不介意我还没有理解,请改写。
-
replace不会修改(不可变的)输入字符串,而是返回更新后的字符串。