【问题标题】:How do I remove a word from a string in an arraylist?如何从数组列表中的字符串中删除一个单词?
【发布时间】:2012-06-09 04:56:14
【问题描述】:

我有

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

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

两者都包含 相同的 10 个元素,格式为 "Foo" + " " + "Bar."

我的问题是如何从 lastName 中的每个元素中删除“Foo”,从 firstName 中的每个元素中删除“Bar”?

【问题讨论】:

  • List&lt;&lt;String&gt;String&gt; 不是有效代码,是吗?
  • 您确定您的要求吗?您说“删除 Foo”,但这是否包括 Foo 之后的空格? “删除栏”是否包括句号?最好陈述你想要的最终结果,而不是改变现有的结果。

标签: java string arraylist word


【解决方案1】:

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

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 的回答也有效。

【讨论】:

  • 我意识到我可以使用一个循环,但我真的不喜欢假设它们的大小相同,因为我对每个数组所做的确实与彼此。
  • 不清楚每个字符串中都有“Foo”和“Bar”。似乎这些是示例,可以是任何可变长度的字符串。因此,您需要获取这些子字符串的长度。这就是我改用 split 的原因。
  • 问题在于它不仅仅是“foo”和“bar”。名称的字符长度可变
  • 当然,我可以看到它的读取方式与您使用 split() 回答的方式相同。他确实说过它们开始时包含相同的元素。
  • 啊,好的,Choco。也许改变你的问题来解释这一点?我会改变我的答案,但它看起来与 Girish 的非常相似。
【解决方案2】:

或者像这样避免处理列表索引,这可能会提示某些不保证随机访问的列表实现中的性能问题(即 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])
}

【讨论】:

  • 我遇到的问题是它适用于“firstName”,但仍然为“lastName”显示“foo”
  • 在这种情况下,要么你的前提是错误的,要么你没有完全按照我所做的那样做。我进行了编辑以避免混淆。
【解决方案3】:

您可以遍历一个列表。遍历 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 个元素。

【讨论】:

  • 这实际上不符合他所说的要求,但可能是他真正想要的。您的代码将完全摆脱 Foo 和 Bar 之间的空间,他在要求中从未提及。
  • 如果他想保留空格,则编辑以考虑空格
  • 嘿,Girish... 请上帝不要使用与除大小写外的其他变量匹配的变量名。这就是拼写错误的原因,就像您的 firstName.set(i, firstName) 中的第二个名字应该是名字......令人困惑,不是吗?
猜你喜欢
  • 2011-02-02
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 2013-10-27
相关资源
最近更新 更多