2016-11-15 4 views
1

効率的な方法はありますか?正規表現を使用してコンマと空白を削除し、異なる変数で分割する

私はラインを指揮し、次にそれらを分割するために引数を渡したい:

  1. のString []コマンド
  2. のString []単語
  3. のString [] fileNameに

例:

String[] arg = {"-b", "-f", "-i", "Dog", "Cat", "--", "fileName1.txt", "fileName2.txt", "fileName3.txt"}; 
Main.main(arg); 

String[] arg = {"-f", "-i", "Hi", "Hello", "--", "fileName1.txt", "fileName2.txt"}; 
Main.main(arg); 

String[] arg = {"-i", "Hi", "Hello", "--", "fileName2.txt"}; 
Main.main(arg); 

注:構文で

Syntax: "[-b] [-f] [-l] [-i] <from> <to> -- " + "fileName" 

-コマンド、単語 - fileNameが

" - " それはであることの間で、ファイル名を毎回ます。

効率的ではない次のコードを実行しました。 String.split( "")を使用して、効率の悪い文字列の異なる配列に何度も繰り返し分割します。

答えて

1

私はこれのような単純なもののために正規表現を使用したいという欲望を理解しません。 3つのリストを作成し、それらを適切なリストに分割しながら引数にループさせるのはなぜでしょうか?

ArrayList<String> flags = new ArrayList<>(); 
ArrayList<String> words = new ArrayList<>(); 
ArrayList<String> files = new ArrayList<>(); 
for (String arg : args) { 
    if (arg.equals("--")) { 
     continue; 
    } 
    if (arg.contains(".")) { 
     files.add(arg); 
    }else if (arg.contains("-")) { 
     flags.add(arg); 
    }else { 
     words.add(arg); 
    } 
} 

すべての引数をタイプ別に分割したら、必要なものを簡単に実行したり、必要に応じて並べ替えることができます。これは正規表現よりも効率的です。

+0

私は、私が必要としないフラグに " - "を追加することに問題があります。私は毎回フラグから最後の要素を削除できます。しかし、別の方法がありますか? – topper1309

+0

@ topper1309 if文を 'if(arg.contains(" - ")&&!arg.equals(" - "))のように変更するだけで、無視することができます。 – nhouser9

+0

それは他の部分に追加されます – topper1309

関連する問題