2012-05-02 13 views
-2

正規表現について多くの検索を行いましたが、最後に文字列の分割に "\\ s +"を使用する方が良いことがわかりました
驚くほど元の文字列には何もありません:空白を分割するとうまくいきません

private static void process(String command) { 
    command = command.substring(0, command.length() - 1); 
    String[] splitted = command.split("\\s+"); 
    for (String str : splitted) { 
     System.out.println(str); 
    } 
} 

サンプル入力:

Boolean b = new Boolean(true); 

好適出力:

[Boolean,b,=,new,Boolean(true)] 

しかし、私のメソッドの出力は次のようになります。

Boolean b = new Boolean(true) 
+3

あなたの質問がありますか?この方法の入力、予想される出力、実際の出力はどれくらいですか? –

+3

なぜ '部分文字列 'ですか? –

+1

コマンドラインで解析引数を調べる場合は、http://commons.apache.org/cli/を確認してください。 –

答えて

2

あなたが「優先出力」はArrays.toString(splitted)を使用することをしたい場合。しかし、あなたのコードは、それが想定されているように動作します。配列の各要素を新しい行に出力します。だから、このコード:あなたが望むようsubstring操作が原因で、あなたの入力文字列の末尾のスペースで動作していないこと

Boolean 
b 
= 
new 
Boolean(true); 
[Boolean, b, =, new, Boolean(true);] 

注:

private static void process(String command) { 
    command = command.substring(0, command.length() - 1); 

    String[] splitted = command.split("\\s+"); 

    for (String str : splitted) { 
     System.out.println(str); 
    } 

    System.out.println(Arrays.toString(splitted).replace(" ", "")); 
    } 

    public static void main(String[] args) { 
    process("Boolean b = new Boolean(true); "); 
    } 

は、この出力を生成します。先にcommand.trim()を使用して、先行/後続のスペースを取り除くことができます。

編集 @Timベンダーが言うように、そこにArrays.toStringの出力における配列要素間のスペースであり、それはOPが望んで正確ではありません、ので、私は、私のコードを編集した

+0

私はあなたの方法を私が言ったものと正確に置き換えましたが、出力はあなたが言ったものではありませんでした! – SAbbasizadeh

+0

私の 'main'メソッドをそのクラスに追加して実行し、何を得るか教えてください。 –

+0

はい;あなたが正しいです。しかし、なぜそれは私のメインで動作しないのですか? – SAbbasizadeh

関連する問題