为什么来自 xml 网络服务的字符串在 Android TextView 中不显示新行?

Why a string from xml web service doesn't show new line in Android TextView?

我使用经典的 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));

None 这些工作,我被这个问题困扰了一段时间。这里有专家可以帮助我吗?

我发现了另一个类似你的问题,请查看下方 URL

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

如果使用 replaceAll,则必须使用 .replaceAll("\\r", "\r");因为

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

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

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

(\s{2})

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

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

用于直接 ASCII/UTF-8 文本和以下用于世界语言的 Unicode

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

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