2010-12-28 21 views
0

私は配列の中にリストを持っていますが、o:やg:wordのように単語の前にo:やg: 。私は2つの関数、1つはg:だけの配列を作成し、もう1つは0:だけの配列を作ることを望みます。Java:文字列配列内の文字列の一部を見つけて新しい配列を作る

また、g:とo:を刈り込みたいその結果から私は配列の範囲外のエラーなどを引き起こさずにこれを行う方法がわからないので、誰かが私に例を与えることができるかどうか疑問に思っていました。

+0

それが台無し初期配列に大丈夫ですか? – Landei

+0

配列外のエラーを発生させずに何かをする方法が不思議に思えるときはいつでも、ArrayListを考えてみてください。 :) –

答えて

2

宿題のような匂い。

String[] array = ... 

ArrayList<String> gList = new ArrayList<String>(); 

ArrayList<String> oList = new ArrayList<String>(); 

for (String word : array) { 
    if (word != null)) { 
     if (word.startsWith("g:")) 
      gList.add(word.subString(2)); 
     else if (word.startsWith("o:") 
      oList.add(word.subString(2)); 
    } 
} 
+0

これは宿題ではありませんが、これに感謝します。正確には私が望んでいたものではありませんが、私の使用のために修正しました – Ugleh

1

新しい方法では、ArrayListを使用して新しいリストを作成します。 2つの新しいリストを取得した後にプリミティブ配列を作成する必要がある場合は、toArray()を使用してください。

0

結果がどのようなサイズになるかを事前に知っていないので、(配列よりも)ArrayListsで作業する方がよいでしょう。しかし、2つのパスを作ることができます.1つは関心の接頭辞を持つ行を数え、もう1つは新しい配列に値を設定します。

int n = 0; 
for (int i = 0; i < array.size; i++) 
    if (array[i].startsWith(prefix)) 
    n++; 

String[] result = new String[n]; 
int j = 0; 

for (int i = 0; i < array.size; i++) 
    if (array[i].startsWith(prefix)) 
    result[j++] = array[i].substring(prefix.length()); 

私はその仕事をすべきだと思います。

+1

中括弧に対して個人的なものはありますか? :P –

+1

確かに。彼らは "コードジャンク"です。不必要な中括弧は可読性を損なう。 imnsho。 http://www.slideshare.net/carlmanaster/codejunk-ignitesd –

0

あなたが台無しに元の配列をできると仮定すると、あなたが順序を保持する必要がないこと、これは非常に高速である必要があります:

String[] array = {"o:1","o:2","g:10","o:3","g:20","o:4","g:30","g:40","o:5"}; 
int low = 0; 
int high = array.length - 1; 
while(low <= high) { 
    if(array[low].startsWith("g:")) { 
     array[low] = array[low].substring(2); 
     low ++; 
    } else if (array[high].startsWith("o:")) { 
     array[high] = array[high].substring(2); 
     high --; 
    } else { 
     String temp = array[low].substring(2); 
     array[low] = array[high].substring(2); 
     array[high] = temp; 
     low++; 
     high--; 
    } 
} 
String[] gs = new String[low]; 
System.arraycopy(array, 0, gs, 0, low); 
String[] os = new String[array.length - low]; 
System.arraycopy(array, low, os, 0, array.length - low); 
関連する問題