1

I have

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

and

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

Both holds the same 10 elements in the form of "Foo" + " " + "Bar."

My question is how do I remove "Foo" from each element in lastName and "Bar" from each element in firstName?

4

3 回答 3

3

好吧,字符串是不可变的,所以如果您要更改列表中 ALL 的字符串,您实际上会用新字符串替换每个列表中的字符串,所以这并不像您想象的那么难。

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] ); 
}

我仍然不喜欢假装我知道两个数组的长度相同,所以我仍然在这里做两次工作。Girish 的回答也有效。

于 2012-06-09T05:04:55.927 回答
1

您可以遍历一个列表。遍历 firstName 时,将 10 个字符串中的每一个拆分为空格 " " 并将第一个标记推回 firstName 列表。将第二个令牌推入 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
}

这应该有效,如果如您所说,每个 List 包含相同的 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 回答