特殊文字を含めたコマンドライン引数の指定
についてまとめました。
指定方法
以下のような指定方法になります。
- スペースを含めたい場合:ダブルクオーテーション 「""」で囲む
- ダブルクオーテーションを文字として扱いたい場合:「\」で囲む
【説明】
Javaのコマンドライン引数は、スペースで区切って列挙しますが、「スペース自体を文字列として扱いたい」場合もあると思います。その場合は上記のように、ダブルクオーテーションや ¥ を使って区切ってあげます。
【実際に書いてみる】
スペース区切りで配列を取得
まずサンプルコードを用意しました。
public class Main {
public static void main(String[] args) {
// 先頭の配列だけを出力する
System.out.println(args[0]);
}
}
コマンドラインで以下のようにコンパイル→出力します。
java Main.java ルパン三世 次元大介 石川五エ門 峰不二子
実行結果は以下です。
ルパン三世
これはコマンドライン配列がスペース区切りでされるため、最初の引数である「ルパン三世」しか出力されていないためです。
スペースを文字列として扱う
ダブルクオーテーションで囲ってスペースを文字列として扱います。
先程のコマンドの配列すべてをダブルクオーテーションで囲いました。
コマンドラインで以下のようにコンパイル→出力します。
java Main.java "ルパン三世 次元大介 石川五エ門 峰不二子"
実行結果は以下です。
ルパン三世 次元大介 石川五エ門 峰不二子
ダブルクオーテーションで囲った部分が一つの配列として取得されました。
ちなみに、ダブルクオーテーションはエスケープされない限りデータとして扱われることはないのでそのポイントは抑えておく。
java Main.java "ルパン"三世
実行結果は以下です。
ルパン三世
ダブルクオーテーションを文字列にする
この場合は半角の「\」をダブルクオーテーションの前に使用します。
java Main.java \"ルパン三世\" 次元大介 石川五エ門 峰不二子
実行結果は以下です。
"ルパン三世"
【まとめ】
試験では以下の点に注意する
- スペースが区切り記号に使われる
- スペースを含む文字列はダブルクオーテーションでくくることで1つとして扱われる。
- ダブルクオーテーションそのものは文字として扱わない。
気になるのは、ダブルクオーテーションを文字として扱う場合、なぜか¥が入力できなくて、\じゃないと出来なかったんですよね・・なぜだろう。
参考文献・記事
参考記事・資料