今天使用OSS后台服务时候,用换行符划分两部分数据。后来发现使用 \n
,从后台获取内容之后,存到windows的txt文本,并没有换行。
后来又继续尝试了几种猜测:
\n
\\n
System.getProperty("line.separator")
\r\n
\\r\\n
最后发现,\r\n
可以达到换行。
在过程中,虽然进行了一些错误的尝试,但是考虑点,有服务器的系统换行区别,字符串转义这两点,大体思考方向是正确的。
lineSeparator
java代码中使用System.lineSeparator()
可以根据运行的系统使用对应的换行符。但是对于android客户端来说,需要知道的是后台的换行符是哪一种,否则重新下载内容下来的时候可能无法得到换行效果,就跟我遇到的场景一样。lineSeparator官方说明
不同系统的换行符
Unix and modern Mac's : LF (\n)
Windows : CR LF (\r\n)
Older Macintosh Systems : CR (\r)
stackoverflow Java String new line
国内和国外的文章对比了以下,windows和linux的换行都一致,mac的话,国内的文章大多数都说是\r
,我也没有mac,无法尝试,但stackoverflow说新的mac和旧的mac换行不一样应该更准确。
反斜杠转义
在出现问题的时候,有考虑过,可能后台使用明字符串存储,所以也尝试了一下转义。关于\
转义。
Java代码中
反斜杠(\),它和紧跟着它的那个字符构成转义字符,如“\n”(表示换行)、“\””(表示字符‘”’)等,所以在字符串中要表示字符''要用“\”来表示,例:如果你这样定义一个字符串String s = “name\sex”是错误的,要这样定义String s = “name\sex”;正则表达式中
在正则表达式中的\\
表示和后面紧跟着的那个字符构成一个转义字符(姑且先这样命名),代表着特殊的意义;所以如果你要在正则表达式中表示一个反斜杠\
,应当写成\\\\