###前提・実現したいこと
args4jのStringArrayOptionHandlerを用いてコマンドライン引数を受け取っているのですが思った挙動を示しません
コマンドラインへの入力
"2 1" 1
直接、main関数に入力した場合
args[0] = "2 1"
args[1] = "1"
コマンドラインへの入力
-v "2 1" 1
StringArrayOptionHandlerで処理した場合
vcm[0] = "2"
vcm[1] = "1"
vcm[2] = "1"
直接、main関数に入力した場合のように空白を処理しない挙動を望んでいます
###結論
handlerの空白を処理するという挙動は仕様なので実行引数の入力を工夫したところで解決はできない
今回は条件に合うhandlerOptionHandlerは既に作成されていたのでそのhandlerを用いれば良い
しかし、自分の望むぱparseの挙動を示すhandlerがない場合
handlerを@Overrideして自分で作成する必要がある
回避策1:
parser.parseArgument(args);を実行する前にargsの要素の空白を別の文字で置き換えを行う
回避策2:
main関数への入力を空白の代わりの文字で行う
###発生している問題・エラーメッセージ
空白が処理されてしまいString[]の要素1つに一文字しか入らない
###該当のソースコード
mavenを使用
java
1import org.kohsuke.args4j.Argument; 2import org.kohsuke.args4j.Option; 3import org.kohsuke.args4j.spi.StringArrayOptionHandler; 4 5public class Shell { 6 7 8 @Option(name="-v", metaVar="x", handler=StringArrayOptionHandler.class) 9 static String[] vcm; 10 11 12 13}
java
1import org.kohsuke.args4j.CmdLineException; 2import org.kohsuke.args4j.CmdLineParser; 3 4public class Main { 5 public static void main(String[] args){ 6 Shell shell = new Shell(); 7 8 CmdLineParser parser = new CmdLineParser(shell); 9 try { 10 parser.parseArgument(args); 11 } catch (CmdLineException e) { 12 e.printStackTrace(); 13 return; 14 } 15 Matrix2D vcm = new Matrix2D(shell.vcm); 16 17 } 18 19} 20
###試したこと
コマンドラインの引数を""や''で囲んでみましたが空白は処理されてしまいました
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。