rdf n-triples 形式を読み取るファイルがあります。ただし、サードパーティの API を使用することは許可されていません (jena など... これは別の議論です)。
しかし、基本的には、次の 2 種類の文字列を取得できます。
<foo 1> <bar 1> <foo bar> .
<foo 2> <bar 2> foobar .
だから、私はクラスを書きたい:
void ParseTriples(String s){
setObject(<foo> part)
setPredicate(<bar part>)
setObject(<foobar> or foobar)
}
私が持っているのはハックです..
public void setNTriples(String text){
Pattern pattern = Pattern.compile("<(.*?)>");
//Pattern pattern = Pattern.compile("<([^>]*)>\\s+[<]?([^>]*)[>]?");
//Pattern pattern = Pattern.compile("(<[a-zA-Z.\\d\\s]+>|\\w+)");
Matcher matcher = pattern.matcher(text);
int count = 0;
int end = 0;
int totalLength = text.length();
while(matcher.find()) {
if (count == 0){
//System.out.println(matcher.group(1));
setSubject(new Text(matcher.group(1)));
//length += getSubject().toString().length();
//System.out.println(length);
count +=1;
}
else if (count == 1){
setPredicate(new Text(matcher.group(1)));
count +=1;
end = matcher.end();
}
else if (count == 2){
//System.out.println(matcher.group(1));
setObject(new Text(matcher.group(1)));
count +=1;
//System.out.println(text.substring(length+5, totalLength));
}
}
//System.out.println(count);
// ugly hack
if (count == 2){
setObject(new Text(text.substring(end+1,totalLength-2)));
}
}
これを修正するにはどうすればよいですか?