为啥来自 xml Web 服务的字符串在 Android TextView 中不显示新行?

Posted

技术标签:

【中文标题】为啥来自 xml Web 服务的字符串在 Android TextView 中不显示新行?【英文标题】: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 起初不起作用,这就是我尝试这些不同解决方案的原因。 【参考方案1】:

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

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

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

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

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

【讨论】:

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

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

(\\s2)

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

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

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

str.replaceAll("(\\s2])", "<br /><br />");

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

【讨论】:

以上是关于为啥来自 xml Web 服务的字符串在 Android TextView 中不显示新行?的主要内容,如果未能解决你的问题,请参考以下文章

WCF 上的 CORS - 为啥在请求来自客户端机器时指定 Web 服务器?

为啥我的 Tomcat 部署的 web.xml 没有被主机服务器读取?

如何使用来自iPhone应用程序的SOAP请求将图像+ xml上传到Web服务器

为啥 XML 仍然用于 Web 服务响应,即使 JSON 更好? [关闭]

如何将 XML 字符串发布到 Web 服务以进行测试? [关闭]

为啥我的 .NET Web 服务 XML 与其他人的不同?