【问题标题】:Escape characters displayed in TextViewTextView 中显示的转义字符
【发布时间】:2015-04-19 17:04:01
【问题描述】:

在我正在制作的 Android 应用程序中,我以编程方式构造了一个 TextView 并将 String 传递给 setText。我传递的字符串是从另一个来源获得的,它包含转义字符。这是一个示例字符串:

AxnZt_35\/435\/46\/34

\/ 实际上应该只是 /。但是TextView 显示的整个内容与上面的示例完全相同。

我用来构造TextView的代码:

TextView textView = new TextView(context);
textView.setText(text);
textView.setTextColor(color);
textView.setTypeface(Typeface.DEFAULT_BOLD);
textView.setTextSize(14);

所以我的问题是,我如何显示额外的\?我只想将上面的示例显示为:

AxnZt_35/435/46/34

谢谢。

编辑

我上面提供的字符串只是一个例子。字符串中可能还有其他字符。例如,字符/\ 本身是完全有效的。问题是/ 显示为\/

【问题讨论】:

    标签: java android textview escaping


    【解决方案1】:

    @Numan1617 的答案很接近,但是对于转义字符和replaceAll(),您必须将它们转义两次。

    This Post

    所以,在这种情况下,正确的代码是:

        String str = "AxnZt_35\\/435\\/46\\/34";
    
        System.out.println(str); //prints AxnZt_35\/435\/46\/34
    
        String s2 = str.replaceAll("\\\\/", "/"); 
    
        System.out.println(s2); //prints AxnZt_35/435/46/34
    

    【讨论】:

    • 感谢您的解释和样品!您替换 (\\\\/) 的方式似乎可以解决问题... +1
    【解决方案2】:

    在使用 Strings replaceAll 方法设置文本之前,您必须替换所有出现的 \:

    textView.setText(text.replaceAll("\\", ""));
    

    【讨论】:

    • 但这不会取代普通的 \ 字符吗?
    • 试过了。编译器抱怨字符串文字中存在无效的转义字符。
    • 这不等同于您发布的第一个答案吗? (只是有“\”)。和 AFAIK,它将替换 all \ 字符。此外,编译器也拒绝了这一点。说这是一个非法或不受支持的转义序列:-/
    【解决方案3】:

    将其作为普通 Java 运行

    public class Klass{
    
        public static void main(String[] args) {
            System.out.println(new String("\\/"));
            System.out.println(new String("\\/").replaceAll("/", ""));
            System.out.println(new String("\\/").replaceAll("\\/", ""));
            System.out.println(new String("\\/").replaceAll("\\\\/", ""));
        }
    
    }
    

    \ 的正则表达式是“\\”:在正则表达式中,一对 \ 等于 new String() 中的一对 \

    【讨论】:

    • 是的,但我遇到的问题是,如果我确实使用“\\”转义,那么它将替换文本中的所有 \。但你的最后一个选项是正确的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    相关资源
    最近更新 更多