由于我的实验中需要用到RDF三元组格式的数据,从网上下载的LUBM数据集中的数据含有“< >”和“.”使得这些含特殊字符的数据不方便存储到数据表中,编写Java代码想把这些字符去掉,考虑用正则表达式,但对这一块不熟悉。又请教大神发现可以用替换的办法来实现。原始数据格式为“<http://www.Department0.University1000.edu/AssistantProfessor0> <http://spark.elte.hu#doctoralDegreeFrom> <http://www.University292.edu> .”运行后的数据变为“http://www.Department0.University1000.edu/AssistantProfessor0 http://spark.elte.hu#doctoralDegreeFrom http://www.University292.edu”
Java代码如下:
package com.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class Test {
public static void main(String[] args) {
// String s ="<http://www.Department0.University1000.edu/AssistantProfessor0> <http://spark.elte.hu#doctoralDegreeFrom> <http://www.University292.edu> .";
try {
//读取文件
BufferedReader br = new BufferedReader(new FileReader("D:\\LUBM_1.n3"));
String data = ""; //+ "\r\n"
File file = new File("D:\\LUBM.n3");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
int i;
while((i=br.read())>0){
data = br.readLine().replaceAll("[<>]+", "").replace(" .", ""); //接着读下一行
bw.write(data);
bw.newLine();
}
System.out.println("跑完了!");
bw.close();
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
开始的时候用while(data! = null)循环的时候,拿到空值,导致导出的数据条数不完整,莫名减少了二百多条。后来声明一个整型变量i,再循环while((i=br.read())>0)时先读数据,数据量大于0才循环去读下一行,有效解决了读到空值时也循环的问题,最后输出的文件中数据条数没缺失。