Javaで青空文庫のルビをパースする
Swiftで作ったサンプルのJava版です。 仕様などはSwift版と同様なので→ Swift版
こちらもJavaで正規表現を利用するサンプルにもなってます。
使い方
String sampleText = "てめえらの|血《ち》は|何色《なにいろ》だーっ!!";
AozoraRubyParser parser = new AozoraRubyParser(sampleText);
List<AozoraRubyParser.Result> tokens = parser.parse();
for (AozoraRubyParser.Result r : tokens){
Log.d("", r.text + (r.ruby != null ? "[" + r.ruby + "]" : "") );
}
パーサーのコード
public class AozoraRubyParser {
static public class Result {
public String text;
public String ruby;
public Result(String t, String r) {
this.text = t;
this.ruby = r;
}
}
private String text;
public AozoraRubyParser(String text) {
this.text = text;
}
public List<Result> parse() {
ArrayList<Result> result = new ArrayList<>();
String patternStr = "|(.+?)《(.+?)》";
Pattern ptn = Pattern.compile(patternStr);
int position = 0;
Matcher matcher = ptn.matcher(text);
while (matcher.find()) {
if (position < matcher.start()) {
String subText = this.text.substring(position, matcher.start());
result.add(new Result(subText, null));
}
position = matcher.end();
// 文字と読み仮名を抽出
result.add(new Result(matcher.group(1), matcher.group(2)));
}
// 文末の残りを追加
if (this.text.length() > position) {
String subText = this.text.substring(position, this.text.length());
result.add(new Result(subText, null));
}
return result;
}
}