所以,自从过去24小时以来,我一直在思考这个问题,在开始之前,让我清楚地说明这个问题只出现在我的一个在marshmallow上运行的android手机上。
问题:
当我使用StringRequest检索字符串响应时,字符串正是它应该是的样式,然后我将它保存到SharedPreferences,并且无论我从SharedPreferences检索文件多少次,该值仍然是正确的(即相同)。但是,当我关闭应用程序并重新启动它,并从SharedPreferences中检索字符串时,字符串会以某种方式更改,长度减少,.equals在与从服务器新获取的相同字符串进行比较时返回false,所以我猜测SharedPreferences会修改String值在Android marshmallow中独占鳌头。 经过大量的调试,我写了两个字符串(从共享偏好和服务器)到单独的.txt文件到内部存储,并用notepad ++和Voila!打开它们,控制字符从'CR LF'改为'LF',因此导致字符串的长度发生变化,但长度不同,当我比较许多在线网站上的两个字符串时,所有字母都说“字符串完全相同!” :(
帮帮我们! 日Thnx
答案 0 :(得分:1)
\n
以外的其他内容,这会减少字符串的长度。每个换行符都会将字符串的长度减少1位数。 解决方案很简单:
每次从SharedPreferences中检索字符串后,将所有换行符替换为\n
。
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", "");
此方法将删除字符串中的所有回车符,因此字符串将从(Windows CR LF)格式转换为(Unix LF)格式。每个换行符的长度将减少1位数。 :)