如何将characher`\ n`替换为android中的新行

6 string android escaping replaceall

我对API请求有一个服务器响应,如下所示。

Success! Your request has been sent.\n\nWe’ll inform you once it is done.
Run Code Online (Sandbox Code Playgroud)

我需要在小吃栏中显示此消息。我需要\n在此响应中添加新行。我试图通过使用replaceAll

String message = (serverResponse.getMessage()).replaceAll("\\n", System.getProperty("line.separator"));
Run Code Online (Sandbox Code Playgroud)

但它显示像这样

在此处输入图片说明

如果我添加了string.xml资源文件并开始使用,getString(R.string.message)则会出现相同的消息,\n则说明工作正常。如何从此响应字符串获取新行?

我尝试\n使用<new_line>服务器响应中的其他字符进行更改,并且与可以正常使用replaceAll。问题仅\n在于响应消息。有什么解析的方法\n吗?

Dal*_*kar 11

您需要的是

String message = serverResponse.getMessage().replaceAll("\\\\n", "\n");

为什么需要四个反斜杠?

因为在Java中,反斜杠\是转义字符。如果要在Java字符串中包含单个反斜杠文字,则必须对其进行转义并使用\\

但是,replaceAll方法需要正则表达式,其中反斜杠也是转义字符,因此您也需要转义它。

基本上,在上面的代码中,Java字符串解析器将首先将这四个反斜杠转换为两个\\\\ -> \\,然后正则表达式解析器会将其余两个反斜杠解释为单个反斜杠文字。


sar*_*ner 5

我相信您应该能够通过执行以下操作来完成。

// Replace "\n" with "<br>"
String message = (serverResponse.getMessage()).replaceAll("\\n", "<br>");

// Now set SnackBar text using HTML
mSnackBar.setText(HTML.fromHTML(message)) 
Run Code Online (Sandbox Code Playgroud)

通过使用HTML.fromtHTML(String)您应该能够保留任何格式,例如中断、ASCII HTML 字符(项目符号、星号等)、着色和/或粗体/斜体!我经常使用它来格式化已显示给用户的 TextViews 中的文本。不明白为什么它不能与 SnackBars 一起使用!