После долгих хлопот я наконец-то выяснил причину. На некоторых устройствах строковые значения, хранящиеся в SharedPreferences, изменяют свои символы EOL.Разрывы строки в строке преобразуются во что-то отличное от \n
, что уменьшает длину строки.Каждый разрыв строки будет уменьшать длину строки на 1 цифру. Решение было простым:
Заменить все разрывы строк на \n
после каждого извлечения строки из SharedPreferences.
String fixedString = problemString.replace(System.getProperty("line.separator"),"\\\n" );
также в случаеваша строка содержит строку, отформатированную вручную, которая содержит символы разрыва строки, отличные от \n
, вы должны использовать это:
String fixedString = problemString.replace("\r\n|\n|\r", "\\\n");
ОБНОВЛЕНИЕ
ВышеРешение вызовет проблемы, если у вас есть строка, которая уже отформатирована с использованием символов Unix EOL, что делает невозможным использование, если у вас есть несколько строк, отформатированных с использованием различных символов EOL.Поэтому лучший подход, который я нашел, - это просто заменить только возврат каретки, обозначенный \r
String fixedString = brokenString.replace("\r", "");
Этот метод удалит все возврат каретки в вашей строке, поэтому строка преобразуется в формат (Unix LF)из (Windows CR LF) формата.Длина будет уменьшаться на 1 цифру при каждом разрыве строки.:)