一、应用描述 因数据整理的业务需要,解密出来的字符串中间带有一些空字符(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()
break
linesStrList.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 linesArrayList = new ArrayList();
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
readFile.setFileName("E:/tmp/test.txt");
QTextCodec *codec = QTextCodec::codecForName("GBK"); // 需 #include
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 |