我的文字有这种格式的句子:
sentence 1 This is a sentence.
t-extraction 1 This is a sentence
s-extraction 1 This_DT is_V a_DT sentence_N
sentence 2 ...
如您所见,这些行由回车键分隔。重复句子, t-extraction , s-extraction 字词。这些数字是句号1,2,..这些短语由 Tab 键分隔,例如在第一行:sentence(TAb)1(TAb)This is a sentence.
或在第二行:t-extraction(TAb)1(TAb)This(TAb)is(TAb)a sentence.
我需要在sql表中映射其中的一些信息,所以我应该提取它们。
我需要第一句和第二句(第一行没有句子单词,第二行没有 t-extraction 和数字)。每个按Tab分隔的部分将映射到sql中的一个字段中(例如{1}}在一列中,1
在一列中,This is a sentence
(在第二行中)在一列中,以及This
和is
)。
你的建议是什么?提前谢谢。
答案 0 :(得分:0)
您可以使用String.split()。
您可以使用的正则表达式为[^A-Za-z_]+
或[ \t]+
答案 1 :(得分:0)
在String上使用split方法可能是关键。 split命令将字符串分成正则表达式匹配的部分,返回匹配之间部分的字符串数组。
您希望匹配标签(或\ t,因为它分隔到)。您还希望将三行作为一个单元处理,下面的代码显示了执行此操作的一种方法(它确实取决于文件格式正确)。
当然你想使用从你的文件创建的阅读器而不是字符串。
public class Test {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new FileReader("/my/file.data"));
String line = null;
for(int i = 0; (line = reader.readLine()) != null; i++){
if(i % 3 == 0){
String[] parts = line.split("\t");
System.out.printf("sentence ==> %s\n", Arrays.toString(parts));
} else if(i % 3 == 1){
String[] parts = line.split("\t");
System.out.printf("t-sentence ==> %s\n", Arrays.toString(parts));
} else {
String[] parts = line.split("\t");
System.out.printf("s-sentence ==> %s\n", Arrays.toString(parts));
}
}
}
}