Почему строка из веб-службы xml не отображает новую строку в Android TextView? - PullRequest
0 голосов
/ 26 декабря 2018

Я использую классический XML в качестве серверной части веб-службы для двух приложений: одно написано на чистом Android, другое на Flutter (iOS).Версия Flutter со встроенной функцией unescape () не имеет проблем с расшифровкой скрытых строк новой строки в 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));

Ничего из этого не работает, и я некоторое время мучаюсь с этой проблемой.Любые эксперты, которые могут мне помочь?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

после работы на прямом веб-сервисе без декодирования в юникоде я смог прочитать новые строки в регулярном выражении

(\\s{2})

, что в основном означает, что новые строки появляются как два пробела.Конечно, выполнение следующих действий решило мою проблему

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

для простого текста ASCII / UTF-8 и следующее для Unicode для мировых языков

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

Это не лучшее решение, ноочистил мою проблему.

0 голосов
/ 26 декабря 2018

Я обнаружил еще одну проблему, такую ​​как ваша, проверьте ниже URL

замените `\\ r` на` \ r` в строке

С replaceAll вам придется использовать.replaceAll ("\\ r", "\ r");потому что

для представления \ в регулярном выражении, вам нужно экранировать его, поэтому вы должны использовать pass \ to regex engine.но и для создания строкового литерала для одиночного \ вам нужно записать его как "\".

Более понятным способом было бы использовать replace ("\ r", "\ r");который автоматически экранирует все метасимволы регулярных выражений.

...