【问题标题】:How to remove section of a String containing a special character Java如何删除包含特殊字符Java的字符串部分
【发布时间】: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 不会修改(不可变的)输入字符串,而是返回更新后的字符串。

标签: java string


【解决方案1】:

我认为 replaceAll() 方法可以从字符串中删除所有特殊字符并在它们的位置放置一个空格。

【讨论】:

    猜你喜欢
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2019-06-09
    相关资源
    最近更新 更多