commandA(myVar, 10) ; コメント commandB(200)区切りパターンにそれらしい正規表現を入れたら上手くいった。
scanner.useDelimiter("(\\s|;.*(\r|\n|\r\n))+");
commandA(myVar, 10) ; コメント commandB(200)区切りパターンにそれらしい正規表現を入れたら上手くいった。
scanner.useDelimiter("(\\s|;.*(\r|\n|\r\n))+");
"command" "(" "myVar" "," "100" ")"
の6つに分割したい。カッコもコンマもスクリプトの要素として意味があるので、分割結果として欲しい。が、java.util.Scannerをそのまま使うと"command(myVar," "100)"の2つに分割されてしまう。Scannerにテキストの区切りパターン(正規表現)を設定することは可能だが、カッコやカンマを区切りパターンに追加すると、今度は分割結果から無くなってしまう。
"command" "myVar" "100"そんな場合は、Scanner#findInLine(Pattern pattern)で、さらに細かく分割すれば良いようだ。
Pattern pattern = Pattern.compile("[(),]|[a-zA-Z0-9]+");
Scanner scanner = new Scanner("command(myVar, 100)");
while (scanner.hasNext()) {
for (;;) {
String token = scanner.findInLine(pattern);
if (token == null) {
break;
}
System.out.println(token);
}
}
以下の結果を得ることが出来た。
command ( myVar , 100 )
MarkdownをJavaから使う方法を調べてみたら、showdown.jsをJava 6付属のRhinoで実行できるようなので、試してみた。
例えばC:\input.txtに以下のように書いておく。
Markdown *rocks*.
showdownのアーカイブをダウンロードして、コマンドプロンプト(Windowsの場合)でshowdown.jsのあるディレクトリに移動した後、以下の1行をコマンド入力する。
jrunscript -f showdown.js -e "print('\n'+new Showdown.converter().makeHtml(read('',true)));" < C:\input.txt
すると以下のHTMLが出力される。(1行目の>>はjrunscriptのプロンプト。2行目からがshowdown.jsの出力)
>> <p>Markdown <em>rocks</em>.</p>
ちなみに、上記のやり方だと、入力するテキストの行数だけjrunscriptのプロンプトが1行目に出力されて何となく目に付く。標準入力(< C:\input.txt)ではなく普通に入力ファイル名と出力ファイル名を指定するやり方に変えれば解消するはず。
--
showdown.jsは、以下のGitHubからダウンロード可能:
coreyti-showdown - GitHub
https://github.com/coreyti/showdown
showdown.jsがサポートするMarkdown文法についての短く分かりやすい説明:
Showdown - Markdown in Javascript
http://pamgau.net/showdown/
Javaでshowdown.jsを使う方法は、以下の記事を参考にさせていただきました:
Markdown記法をJavaで扱いたい...Scripting for the Java と showdownを組み合わせる - Object Design
http://osima.jp/blog/showdown-on-java.html