1

私は持っています

List<String> firstName = new ArrayList<String>()

List<String> lastName = ArrayList<String>()

どちらも同じ10個の要素を次の形式で保持します"Foo" + " " + "Bar."

私の質問は、 lastNameの各要素から「Foo」を削除し、 firstNameの各要素から「Bar」を削除するにはどうすればよいですか?

4

3 に答える 3

3

文字列は不変なので、リスト内のすべての文字列を変更する場合は、実際には各リスト内の文字列を新しい文字列に置き換えることになります。したがって、思ったほど難しくはありません。

for ( int i = 0; i < firstName.size(); i++ ) {
    String [] parts = firstName.get(i).split(" ");
    firstName.set( i, parts[0] ); 
}
for ( int i = 0; i < lastName.size(); i++ ) {
    String [] parts = lastName.get(i).split(" ");
    lastName.set( i, parts[1] ); 
}

私はまだ両方の配列が同じ長さであることを知っているふりをするのが好きではないので、私はまだここで2回作業を行っています。ギリッシュの答えもうまくいきます。

于 2012-06-09T05:04:55.927 に答える
1

1つのリストを繰り返すことができます。firstNameを反復処理するときは、空白 ""で10個の文字列をそれぞれ分割し、最初のトークンをfirstNameリストにプッシュバックします。2番目のトークンをlastNameリストにプッシュします。

for(int i=0; i < firstName.size(); i++){
    String name = firstName.get(i);
    String[] tokens = name.split(" ");
    String first = tokens[0];
    String last = tokens[1];
    firstName.set(i, first);  //firstName.set(i, first + " ") to keep the whitespace
    lastName.set(i, last); //lastName.set(i, " " + last) to keep the whitespace
}

あなたが言うように、各リストに同じ10個の要素が含まれている場合、これは機能するはずです。

于 2012-06-09T05:02:45.863 に答える
1

あるいは、このようにして、ランダムアクセスを保証しない特定の種類のリスト実装(つまり、LinkedList)でパフォーマンスの問題を引き起こす可能性のあるリストインデックスを処理する必要をなくします。

ListIterator<String> it = firstNames.listIterator(); 
while(it.hasNext()){
   it.set(it.next().split(" ")[0])
}

it = lastNames.listIterator(); 
while(it.hasNext()){
   it.set(it.next().split(" ")[1])
}
于 2012-06-09T05:31:16.077 に答える