`
qindongliang1922
  • 浏览: 2147538 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116328
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124593
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58457
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70354
社区版块
存档分类
最新评论

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

    博客分类:
  • JAVA
阅读更多
这几天,由于项目要求,需要写一个从数据库批量读取数据然后写入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系统下,回车换行符号是"\r\n".但是在Linux等系统下是没有"\r"符号的。

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

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




知道这个问题后,散仙在原来去除\n换行的代码处,又加入了\r字符的去除,再尝试运行程序,终于恢复了正常的数据格式。


总结:像\r\n这种人眼不可见的字符,在程序写入文件时,最后能够判断去除一下,以免发



1
1
分享到:
评论
2 楼 qindongliang1922 2014-12-20  
xlaohe1 写道
System.getProperty("line.separator");


这位朋友,想表达什么意思?
1 楼 xlaohe1 2014-12-20  
System.getProperty("line.separator");

相关推荐

    c程序设计习题参考(谭浩强三版)习题参考解答

    4.4 若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51247,n=128765,c1=’a’,c2=’b’,想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。 6 4.5请写出下面程序的输出结果: 7 4.6 用下面的...

    语言程序设计课后习题答案

    迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。 1-2 面向对象的编程语言有哪些特点? 解: 面向对象的编程语言与以往各种编程...

    C 程序指导书及实践指导

    掌握有关数组和字符串的程序设计方法。 [实验内容和步骤] 1 已知一组数据如下: 6,3,42,23,35,71,98,67,56,38 编写程序,把它们按从小到大的次序排列起来。 程序如下: /*EX3-1*/ # include # define N 10 ...

    记事本黑色方框去除工具

    双击打开界面,点击设定文件夹,选择记事本所在的文件夹,在“请输入被替换字符的正则表达式:”中输入"\n",在“请输入替换字符的正则表达式:”中输入"\r\n",点击“使用正则表达式方式对文件进行替换操作”按钮。...

    计算机二级C语言上机真题

    给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去 除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回 所指变量。 例如,输入一个数:27638496,新的数:为739。 请...

    java 正则表达式

    JAVA正则表达式语法(转)正则表达式语法正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式示例表达式 ...

    STC15W408AS_串口程序

    4.接收数据为字符串时,识别尾部\r\n字符为结束符 5.接收数据为16进制数组时,识别尾部FF FF FF为结束符-暂未开启 6.pirntf使用示例: 打印字符串printf(“系统启动成功!”); 打印八进制printf(“八进制 --> %o\n”...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    一、Qt Creator 的安装和hello world 程序的编写(原创) 1.首先到Qt 的官方网站上下载Qt Creator,这里我们下载windows 版的。 下载地址:http://qt.nokia.com/downloads 如下图我们下载:Download Qt SDK for ...

    C语言标准教程第一章 C语言概论

    因此在程序中使用空白符与否,对程序的编译不发生影响,但在程序中适当的地方使用空白符将增加程序的清晰性和可读性。 4.标点和特殊字符 C语言词汇  在C语言中使用的词汇分为六类:标识符,关键字,运算符,分隔...

    (谭浩强)c语言学习书

    由于C语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用,成为当代最优秀的程序设计语言之一。 1.3 C语言版本 目前最...

    bat批处理文件实现复制、删除、创建文件夹、执行程序、打开文件

    [注意]:不论是程序或文件路径中含有空格,都必须用引号括起来: start d:\TheWorld\TheWorld.EXE "e:\My documents\我有一个恋爱.htm" 所有程序中的引号不能是全角的,必须用半角的格式,所以输入引号前最好关闭...

    入门学习Linux常用必会60个命令实例详解doc/txt

    -n:一般而言,mount挂上后会在/etc/mtab中写入一笔资料,在系统中没有可写入文件系统的情况下,可以用这个选项取消这个动作。 4.应用技巧 在Linux 和Unix系统上,所有文件都是作为一个大型树(以/为根)的一部分...

    etl_example:用于管理 csv 中存在的所有不同数据源的简单快捷的 ETL 程序

    etl_example 用于管理 csv 中存在的... 请注意,用户文件包含 Windows EOL,您可以通过以下方式将其删除: perl -pi -e 's/\r\n|\n|\r/\n/g' *.csv 文件夹里面。 免责声明:这里的快速和肮脏,真正的意思是快速和肮脏。

    正则表达式

    当一个正则表达式成功地和目标字符串相匹配时,可以从目标串中抽出和括号中的子模式相匹配 的部分.例如,假定我们正在检索的模式是一个或多个字母后面跟随一位或多位数字,那么我们可以使用模式 / [a-z] + \ d+/.但是...

    中文简体压缩软件RAR 6.0

    * 对于文本、声音、图像和 32 位和 64 位 Intel 可执行程序压缩的特殊优化算法 * 获得比类似工具更好的压缩率,使用'固实'压缩 * 身份校验(只有注册版本可用) * 自解压压缩文件和分卷压缩(SFX) * 对物理...

    大工软院大二姜国海小学期-第二次作业&huffman;.zip

    其实就是写频率文件的时候将字符'\r'、'\n'替换成字符串"\\r"、"\\n"写入,对于读取频率生成树时候特判一下将字符串"\\r"、"\\n"转换为'\r'、'\n'就好。两天前死活想不到怎么解决,今天突然想到的方法。

    WinRAR_4.0.exe

    请注意,如果这个命令导致压缩文件中所有文件 全部删除,这个空的压缩文件将被删除。 e 解压文件到当前目录。 f 更新压缩文件中的文件。 更新打包到压缩文件后被改变的文件。这个命令不 向压缩文件中添加新...

    Lephone Loczlize Plus 1.06 中文免费版 PE 字串替换器.zip

    Lephone Loczlize Plus 1.06 中文注册版是一个本地化工具,主要用于非资源格式的本地化工作,支持的种类包括非资源格式的 C 编译的程序中的 ASCII 字符串和 UniCode 字符串、非资源格式的 Delphi(C++ Builder)编译...

    rar压缩软件.rar

    请注意,如果这个命令导致压缩文件中所有文件 全部删除,这个空的压缩文件将被删除。 e 不带压缩路径解压文件。 解压的文件不包括它们的路径部分,因此所有文件都创建到同一个目标目录 中。 如果你要解压...

Global site tag (gtag.js) - Google Analytics