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

请注意程序中的\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写的字符串联接

    请注意,`dest`必须有足够的空间容纳源字符串的所有字符,否则可能会导致内存溢出。 下面是一个使用`strcat`进行字符串连接的例子: ```c #include #include int main() { char str1[20] = "Hello, "; char ...

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

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

    记事本黑色方框去除工具

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

    STC15W408AS_串口程序

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

    基于对话框例子程序,MFC调用控制台,利用cout、printf输出信息

    在Windows编程环境中,MFC(Microsoft Foundation Classes)是一个强大的库,它基于面向对象的C++构建,用于简化和加速开发Windows应用程序。这个标题所指的示例程序是关于如何在MFC对话框应用程序中调用控制台并...

    C语言顺序结构程序设计.doc.pdf

    在例子中,格式化字符串 “%f,%f” 表示连续读取两个浮点数,并将它们分别存储在变量 r 和 h 指向的内存地址中。在 printf 函数中,格式化字符串 “%6.2f” 用于输出一个浮点数,其中 “6” 表示输出宽度至少为6个...

    C程序作业答案.pdf

    我将尽力从中提取和整理出一些可能的知识点,但请注意,由于原文内容的限制,解释可能不完全准确。 1. C语言基础语法:从给出的代码片段来看,包含了一些基本的C语言语法元素,如`#include`预处理指令、`int main`...

    判断程序是否在U盘上运行的

    在易语言这种流行的中文编程语言中,我们可以编写这样的代码来判断程序是否在U盘上运行。 易语言,全称“易语言·飞扬”,是中国本土的一款图形化、面向对象的编程语言,它的特点是语法简洁明了,易于学习和使用,...

    python读取txt文件中特定位置字符的方法

    # 但请注意这可能会导致错误,因为Python 3不再推荐使用此方法。 # 这里只是为了兼容性展示,实际应用中应该避免使用。 # sys.setdefaultencoding('utf-8') # 打开文件 with open("resources.txt", "r", encoding='...

    2012年9月国家计算机二级C语言上机考试题库2套定义.pdf

    - `gets(item)` 用于从标准输入读取一行字符串并存储到 `item` 中,但请注意 `gets` 在 C11 标准后已被弃用,推荐使用 `fgets`。 - `puts(a)` 用于输出字符串 `a` 到标准输出,包括末尾的换行符。 综上所述,这些...

    C语言程序设计第三版谭浩强课后习题答案完整版

    编写一个程序,使用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为'C'、'h'、'i'、'n'、'a',经过运算,使c1、c2、c3、c4、c5分别变为'G'、'l'、'm'、'r'、'e',并输出。 **解答:** ```c #include int ...

    C语言程序题

    在这些C程序题中,我们可以探索多个C语言的基础概念和编程技巧。首先,我们来逐一解析这些知识点: 1. **库函数求绝对值**:在C语言中,我们可以使用`<math.h>`库中的`fabs()`函数来计算一个数的绝对值。例如,`...

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

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

    面向对象程序设计 Java实现

    通过本次实验,加深了对面向对象编程的理解,并在实践中熟悉了Java语言的一些高级特性,如枚举类型、类和对象的使用等。特别是在文件处理方面,虽然Java的文件读写机制与C/C++有所不同,但在实际应用中也能灵活应对...

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

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

    c语言电子时钟程序 c语言电子时钟程序

    在C语言中编写一个电子时钟程序是一项基础但有趣的任务,它可以帮助初学者理解系统调用、时间处理和控制台输出。在这个项目中,我们将探讨如何利用C语言的库函数来实现一个简单的命令行电子时钟,实时显示当前的时间...

    python基础.doc

    在Python编程语言中,字符串是表示文本数据的基本类型,它是由一个或多个字符组成的序列。本文将深入探讨Python中的字符串基础知识,包括它们的定义、表示形式、转义字符、输入与输出,以及相关的操作。 4.1 字符串...

Global site tag (gtag.js) - Google Analytics