加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

请注意程序中的\r和\n字符

发布时间:2020-12-14 01:29:00 所属栏目:百科 来源:网络整理
导读:这几天,由于项目要求,需要写一个从数据库批量读取数据然后写入HDFS的一个程序,本来算不上什么比较难的问题,但程序运行完后,发现在程序log里记录的数据总量,与实际的写入到文件里的总数不一致,然后就开始检查程序,发现程序没啥问题,然后就开始检查数
这几天,由于项目要求,需要写一个从数据库批量读取数据然后写入HDFS的一个程序,本来算不上什么比较难的问题,但程序运行完后,发现在程序log里记录的数据总量,与实际的写入到文件里的总数不一致,然后就开始检查程序,发现程序没啥问题,然后就开始检查数据,果然在数据里发现有一行数据,无故错位了,导致实际文件里数据量多出一部分,部分数据如下:
13214    atcode00as6attrnameMaterialattrnameMaterialattrname_itMaterial_itattrname_frMaterial_frattrname_esMaterial_esattrname_deMaterial_deattrname_ptMaterial_ptatvalnamePlasticattrvalname_itPlastic_itattrvalname_ptPlastic_ptattrvalnamePlasticattrvalname_dePlastic_deattrvalname_frPlastic_frsysnamecatedisattrvalcid019026002002attrvalMaterial-Plasticisbrand0sortval1-null
13215    atcode00e9aattrnameStyle
attrnameStyle
attrname_itStyle
_itattrname_frStyle
_frattrname_esStyle
_esattrname_deStyle
_deattrname_ptStyle
_ptatvalnameOtherattrvalname_itOther_itattrvalname_ptOther_ptattrvalnameOtherattrvalname_deOther_deattrvalname_frOther_frsysnamecatedisattrvalcid019026002002attrvalStyle
-Otherisbrand0sortval0-null



注意上面的数据中,13215这行数据,是一条数据,但是写到HDFS上时,就变成了多行,既然是换行了,那么解决办法很简单就是把原数据中的n(人眼不可见),给使用正则表达式替换为空字符串即可,然后散仙把原始数据给去除n字符了,继续运行,发现这条数据仍然是错误显示的,后经查找发现在,如果数据里,存在r字符也会影响数据的换行,下面看见r和n的区别:

换行符‘n’和回车符‘r’

顾名思义,换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符

'n' 10 换行(newline)
'r' 13 回车(return)


也可以表示为'x0a'和'x0d'.(16进制)

在windows系统下,回车换行符号是"rn".但是在Linux等系统下是没有"r"符号的。

在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要判定"rn"又要判定"n"。

写程序时可能得到一行,将其进行trim掉'r',这样能得到你所需要的string了。




知道这个问题后,散仙在原来去除n换行的代码处,又加入了r字符的去除,再尝试运行程序,终于恢复了正常的数据格式。 总结:像rn这种人眼不可见的字符,在程序写入文件时,最后能够判断去除一下,以免发

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读