JavaScript 標準入力・標準出力でJavaのメソッドを使う方法

要旨

JavaScriptで、標準入力・出力にJavaのメソッドが使用できるのでその紹介。
(但し、rhinoに限る。 spidermonkey/node.jsでは不可。
また、この記事は標準入出力での使用方法について書いたものなので、JavaScriptの本来用途としてのブラウザ上の表示では動作しない)

「標準入力」「標準出力」について

JavaScriptは動的なWebサイトを構築するのに必須の技術であるが、基本的にブラウザ上で何かをするものなので、Web系の人など
「標準入力」「標準出力」ってナニ?
状態の人が少なからずいる様だ。

ざっくり言えば、「標準入力」とはキーボードからの入力、「標準出力」とはディスプレーへの出力である。
詳細は下記を参照頂きたい。

標準入力、標準出力、標準エラー出力、パイプとは?
標準ストリーム - Wikipedia

Webの仕事においては知らなくても全然困らないであろうが、CodeIQpaizaなどのサイトでコードを提出する際 は「標準入力」「標準出力」を利用できるコードを書く必要がある。 しかし、 JavaScriptではこれが簡単ではない。

一応下記のサイトで幾つかの言語について標準入出力のサンプルを紹介されているが説明は十分ではない。

各言語の標準入出力サンプル - CodeIQ
(ログインしないと見られない事もあるかもしれない)

そこで、下記の様な方法でJavaのメソッドを利用できれば便利だという話。

方法

入力の例(BufferdReaderを使用)

importPackage(java.io);
importPackage(java.lang);

var br = new BufferedReader(new InputStreamReader(System['in']));
var str;
while((str=br.readLine())!==null){
    System.out.println(str);
}

上記の例では入力にBufferedReader、出力にSystem.out.printlnを使用している。
Javaに詳しくない方の為に少し解説する。
Javaでは標準入力からの入力の方法が2つある。
java.io.BufferedReader を使う方法と、java.util.Scanner を使う方法である。
こちらは最初の方法

  • 変数(この例ではbrとした)を宣言し、標準入力を示すSystem['in']から読み込むインスタンスをnewして代入する。
  • テキストを1行読み込むreadLine()メソッドの返り値を変数に代入し、入力がある限り標準入力の内容をそのまま標準出力に出力する。
    (readLine()は読み込めた場合はそのテキスト、EOFに達した場合はnullを返す)

入力の例(Scannerを使用)

importPackage(java.lang);

var sc = new java.util.Scanner(System.in);
while(sc.hasNext()){
    var str = sc.next();
    var num = parseInt(str);
    System.out.printf("%3.0f\n",num);
}

2つめの例
java.util.Scanner を使う方法。

  • System. in(System['in']でも良い)より読み込むインスタンスをnewして変数(ここではscとした)に代入する。
  • 入力文字があるかないかを返すboolean hasNext()メソッドがfalseを返すまで読み込み、出力する。
  • 出力の際、文字列を数値に変換、小数点以下を切り捨て、3桁目までを右揃えで桁を揃えて出力。

  なお、Scannerでは正規表現が使え、文字列、数値等必要なものを選んで取り込む事ができるが、その方法は別に調べて欲しい。
next()を使ったこの例では文字列をそのまま返し、parseInt()で処理している。

おまけ

この例では出力にprintfを使っている。
JavaScriptで書式化文字列を使用できたらと思っていた人は多いのではないかと思う。
Javaのパッケージを利用する事で、printf が使えるのである。
但し、これはあくまでも標準出力での限定の話であるし、元々静的型付け言語ではないJavaScriptでの書式指定は完全な互換性がある訳では無い様で、調べた限りではparseInt()しても%dによるint型での書式化はできず、あくまでも浮動小数点型(%f)でしか動作しないなど、何でもできる訳ではなさそうである。

以上。
では、

Sponsored Link