【问题标题】:Replacing (not removing) special char in a String by other char用其他字符替换(不删除)字符串中的特殊字符
【发布时间】:2018-11-14 15:00:15
【问题描述】:

我需要将"《br》" 替换为"<br>"

replaceAll 不起作用,但如果我在调试时在变量窗口中这样做......它可以工作!

indexOf("《") 相同,返回 -1 但使用变量 window 返回 12

我该如何替换它?

所以问题是,如何让它在代码中工作

【问题讨论】:

  • 你可能会做string.replaceAll(...),但你应该重新分配一个结果:string = string.replaceAll(...)
  • 尝试用 ASCII 码评估这个表达式

标签: java android indexof replaceall


【解决方案1】:

由于 String 是不可变的,您不会更改 text 变量的原始值。 replaceAll 创建具有正确值的新字符串,您必须将其分配给变量才能使用它。

用法参考可以在here找到更多解释,但基本用法是:

String originalText ="some text with letters to replace";  
String newTextWithReplacedValues = originalText.replaceAll("a","e");//replaces all occurrences of "a" to "e"  
System.out.println(newTextWithReplacedValues);  

您可以在调试器中看到它在运行,因为text.replaceAll(...) 返回了正确的值。它只是没有改变原始的text 变量。

【讨论】:

  • 可能是我的问题不够清楚。我现在必须将替换分配给一个字符串,但是如果您看到第二张图像,它显示 pos1 == -1 ,这意味着它没有找到特殊字符。我这样做是因为将 replaceAll 的结果分配给新字符串时,它没有进行替换。所以我检查是否使用 indexOf 找到了特殊字符。我应该更好地解释这个问题。
【解决方案2】:

对我来说,替换效果很好。

public class Application {
    public static void main(String[] args) {
        String s = "《br》";
        s = s.replace("《", "<").replace("》", ">");
        System.out.println(s);
    }
}

这是Character documentation:

从 U+0000 到 U+FFFF 的字符集有时被称为 作为基本多语言平面(BMP)。代码点的字符 大于 U+FFFF 的称为补充字符。爪哇 平台在 char 数组和 String 和 StringBuffer 类。在此表示中,补充 字符表示为一对 char 值,第一个来自 高代理范围,(\uD800-\uDBFF),从第二个 低代理范围 (\uDC00-\uDFFF)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多