【问题标题】:Why a string from xml web service doesn't show new line in Android TextView?为什么来自 xml Web 服务的字符串在 Android TextView 中不显示新行?
【发布时间】:2019-05-24 10:26:01
【问题描述】:

我使用经典的 XML 作为我的两个应用程序的 Web 服务后端,一个用纯 Android 编写,另一个用 Flutter (iOS) 编写。内置 unescape() 函数的 Flutter 版本在破译 XML 中隐藏的换行符时没有问题。但是,凭借多年的历史和成千上万的程序员和解决方案,我无法使用广泛可用的解决方案在应用程序中的文本中显示新行,例如

str.replaceAll("\\r\\n", \r\n");
str.replaceAll("\\n", "\n");

另外,因为我得到的是字符串中的 unicode,所以我也尝试了这个以在 HTML 中显示

str.replace("\r\n", "<br />");
str.replace(" ", "&nbsp;");
txtView.setText(Html.fromHtml(str));

这些都不起作用,我现在被这个问题困扰了一段时间。这里有没有专家可以帮助我?

【问题讨论】:

  • 请尝试一下替换方式直接写txtView.setText(Html.fromHtml(str));
  • @MayankSharma 起初不起作用,这就是我尝试这些不同解决方案的原因。

标签: android xml parsing textview newline


【解决方案1】:

我发现另一个像你这样的问题检查下面的 URL

replace `\\r` with `\r` in string

使用 replaceAll 你必须使用 .replaceAll("\\r", "\r");因为

要在正则表达式中表示 \,您需要对其进行转义,因此您需要将 \ 传递给正则表达式引擎。
但是要为单个 \ 创建字符串文字,您需要将其写为“\”。

更清晰的方法是使用 replace("\r", "\r");这将自动转义所有正则表达式元字符。

【讨论】:

  • 我无法更改响应,因为它在 Flutter/Dart 中完美运行,而且我没有写任何独特的东西,我只是附加一个来自 SQL 结果的字符串。
【解决方案2】:

在没有 unicode 解码的直接网络服务上工作后,我能够阅读正则表达式中的新行

(\\s{2})

这基本上意味着新行作为两个空格到达。当然,执行以下操作解决了我的问题

str.replaceAll("(\\s{2})", "\n\n");

用于纯 ASCII/UTF-8 文本,以下用于 Unicode 用于世界语言

str.replaceAll("(\\s{2])", "<br /><br />");

这不是最好的解决方案,但已经解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多