У меня есть файл, который читает формат rdf n-triples. Но мне не разрешено использовать сторонние API (например, jena и т. Д.). Это разные дебаты).Как разобрать строку, содержащую n-тройки RDF?
Но в принципе, я могу получить два вида строки:
<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)));
}
}
Как это исправить?
Какой результат вы пытаетесь достичь? –
Просто используйте регулярное выражение для '^ <([^>] +)> \ s + <([^>] +)> \ s + ([^>] +)>? $' Вместо этого? http://www.debuggex.com/r/sSJBdZuSTtL-4JpB –
Итак, вы пытаетесь написать парсер rdf, и по какой-то причине вы не можете просто использовать сторонний парсер? –