一、应用描述
因数据整理的业务需要,解密出来的字符串中间带有一些空字符(NUL),用Notepad++打开,如图1所示:
欲匹配分割或匹配替换该字符在不同语言中有着不同的匹配规则,本文将以python、java及QT C++三种语言作为示例。

二、应用示例
1、python语言中的匹配
(1)应用需求
读取文本并替换掉NUL字符,将处理后的字符串输出到文本中。
(2)代码示例

if __name__ == '__main__':linesStrList = []readFile = open(r"E:\tmp\test.txt", "r")writeFile = open(r"E:\tmp\debugFile.txt", "w")while True:linesStr = readFile.readline()if not linesStr:readFile.close()breaklinesStrList.append(linesStr)  # 存入容器中for tempStr in linesStrList:outStr = tempStr.replace("\00", " $ ")  # 匹配NUL字符,替换为 $ writeFile.writelines(outStr)writeFile.close()

(3)运行结果
对比,发现NUL字符已成功匹配且被替换

2、java语言中的匹配
(1)应用需求
为获取两个NUL之间的字符串,如图中的Ω或V。
(2)示例代码

package demo;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;public class Demo {public static void main(String[] args) throws IOException{String outString;String linesString;String[] tempStrings;ArrayList<String> linesArrayList = new ArrayList<String>();FileReader testFileReader = new FileReader("E:\\tmp\\test.txt");BufferedReader testBufferedReader = new BufferedReader(testFileReader);FileWriter debugFileWriter = new FileWriter("E:\\tmp\\debugFile.txt", false);BufferedWriter debugBufferedWriter = new BufferedWriter(debugFileWriter);while((linesString = testBufferedReader.readLine()) != null) {linesArrayList.add(linesString);}testBufferedReader.close();for (String tempString : linesArrayList) {tempStrings = tempString.split("\\\00");  // 根据NUL字符分割if(tempStrings.length > 1) {outString = tempStrings[1];debugBufferedWriter.write(outString + "\n");}}debugBufferedWriter.close();}}

(3)运行结果
对比可知,两个NUL字符之间的字符串已被提取出来

3、QT C++中的匹配
(1)应用需求
匹配NUL字符并替换
(2)示例代码

    QFile readFile;QFile writeFile;QString outStr;QString linesStr;QByteArray linesByte;QStringList linesStrList;writeFile.setFileName("E:/tmp/debugFile.txt");writeFile.open(QIODevice::ReadWrite);QTextStream writeHadle(&writeFile);  // 需 #include <QTextStream>readFile.setFileName("E:/tmp/test.txt");QTextCodec *codec = QTextCodec::codecForName("GBK");  // 需 #include <QTextCodec>if(readFile.exists("E:/tmp/test.txt")){readFile.open(QIODevice::ReadOnly | QIODevice::Text);while (!readFile.atEnd()) {linesByte = readFile.readLine();linesStr = codec -> toUnicode(linesByte);linesStrList.append(linesStr);}readFile.close();foreach (QString tempStr, linesStrList) {outStr = tempStr.replace(QChar('\0'), " ");  // 匹配替换为空格writeHadle << QString(outStr + "\n");}writeFile.close();}

(3)运行结果

三、总结
在python语言中,匹配NUL字符应为"\00",而在java语言中应为"\\00",最后是Qt C++语言中应匹配QChar(’\0’),匹配后可对字符串分割或替换等其他操作。

关于空字符(NUL)在三种不同语言中的匹配相关推荐

  1. python判断字符串合法,详解Python判定IP地址合法性的三种方法 python中判断一个字符串是否是IP地址...

    html 中 鼠标放在标签上会显示小手状,其它标签在其他标签上,美工给加了一些样式,鼠标放上去也显示小手状.有哪位大手状样式 有什么不懂的前端问题可以去菜鸟驿站.全都是泡沫,只一刹的花火,所谓的友情, ...

  2. 三种形式化语言和方法

    VDM --VDM是在1969年为开发PL/1语言时,由IBM公司维也纳实验室的研究小组提出的,VDM是一种功能 构造性规格说明技术,它通过一阶谓词逻辑和已建立的抽象数据类型来描述每个运算或函数的功能 ...

  3. c语言中的文件类型只有文本文件一种,C语言中的文件类型只有哪两种_后端开发...

    pycharm能干嘛_后端开发 PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示 ...

  4. 【C语言进阶深度学习记录】三十三 C语言中动态内存分配

    如何在程序运行的时候动态给程序分配内存? 文章目录 1 动态内存分配的意义 1.1 C语言中如何动态申请内存空间 1.2 malloc和free的用法 1.3 calloc与realloc 1.31 ...

  5. C#三种判断数据库中取出的字段值是否为空(NULL) 的方法

    操作数据库,需要判断返回的字段值是否为空,大致有以下三种方法: 1 通过System.DBNull判断,网上大部分都使用这个方法. DataTable dt;         //假设字段为name, ...

  6. android item三种,Android RecyclerView中的ItemDecoration的几种绘制方法

    如题,我们使用recyclerview的时候,如果没有设置显示条目的margin,或者padding的话,是没有分割线效果的. 那么除去使用margin或padding,其余的方法是用itemdeco ...

  7. 教你三种Model(AR)中自定义验证规则的方法

    2019独角兽企业重金招聘Python工程师标准>>> 各位Yii2兄弟都知道Model的rules里面可以使用自己定义的验证规则,我们今天就把自定义规则做一个总结,进行一次彻底的知 ...

  8. java三种注释_Java中三种常见的注释(注解) Annotation

    Java为我们提供了三种Annotation方便我们开发. 1 Override-函数覆写注解 如果我们想覆写Object的toString()方法,请看下面的代码: 1 classAnnotatio ...

  9. python中判断文件是否存在的三种方式_Python中判断文件是否存在的方法

    Python中判断文件是否存在的方法 发布时间:2020-08-06 11:15:42 来源:亿速云 阅读:58 作者:小新 这篇文章主要介绍Python中判断文件是否存在的方法,文中介绍的非常详细, ...

最新文章

  1. 点分治问题 ----------- 2019-2020 ICPC Asia Hong Kong Regional Contest C.Constructing Ranches[点分治+树状数组]
  2. Linux/ubuntu 服务器开启6010端口-X11服务-ssh连接
  3. 使用JQuery Validate插件的报Cannot read property 'settings' of undefined错误的解决方法
  4. valgrind基础
  5. 数字图像处理之频率域图像增强
  6. sun java ide,1.6 JAVA IDE安装
  7. Flink SQL Client注册SCALA UDF完整流程
  8. notepad++ 使用去掉自动检查红线
  9. AngularJs学习笔记--Modules
  10. 不服OceanBase跑分?今天起可到阿里云上一战
  11. 【机器人操作系统】ROS工作空间及功能包的创建
  12. audio-音频标签
  13. 解决XCode运行app在模拟器上,提示模拟器不存在
  14. 编程中的幂等性(一):http幂等性
  15. html的个人简历边框,怎样制作简历模板边框
  16. Therapy-Induced Evolution of Human Lung CancerRevealed by Single-Cell RNA Sequencing 治疗后肺癌单细胞测序文章分享
  17. 拔丝芋头的Java学习日记---Day10
  18. 多个CYUSB3014连接主机时添加序列号
  19. 杂谈|程序员还是工程师
  20. 多重网格法(multigrid)求解1d泊松方程--python

热门文章

  1. 如何实现简单的随机点名
  2. Vb下调用Help文件 (转)
  3. 最好用的coreldraw2020中文版,安装好后不显示评估版,显示已注册
  4. MAYA打造复古风书房一角场景模型-3D建模场景模型教程
  5. 彻底关闭win10自动更新(针对已经关闭windows update项,但系统仍自动更新的问题)
  6. 自定义圆形进度条的实现方式
  7. Keras模型中数据维度报错
  8. 初始化mysql报错
  9. 一文读懂图像信号中的高频和低频
  10. AT24C16页写和多页写