如何检测一个元素是不是是数组中的最后一个元素?
Posted
技术标签:
【中文标题】如何检测一个元素是不是是数组中的最后一个元素?【英文标题】:How to detect if an element is the last element in an array?如何检测一个元素是否是数组中的最后一个元素? 【发布时间】:2019-04-08 07:49:18 【问题描述】:下面的代码根据位置拆分一个String,然后把它放到一个ArrayList中。
例如,如果字符串是"Who Framed Roger Rabbit?"
,那么fragmentMessage
将在每8 个字符处拆分消息。
因此 ArrayList 将如下所示:[Who Fram, ed Roger, Rabbit?]
ArrayList的元素如下:
-
ArrayList 元素 0:
Who Fram
ArrayList 元素 1:ed Roger
ArrayList 元素 2:Rabbit?
然后我在 main 方法中有一个 for-each 循环,它遍历 ArrayList。
如何检测迭代时是否到达数组的最后一个元素?
例如,“如果这是数组的最后一个元素,则打印“LAST ELEMENT”。
import java.util.ArrayList;
import java.util.List;
public class LastElement
public static void main(String[] args)
String message = "Who Framed Roger Rabbit?";
for (String fragment : fragmentMessage(message))
/*
* If "fragment" is the last element of the array, then do something
*/
private static List<String> fragmentMessage(String message)
List<String> fragmentedMessage = new ArrayList<>();
for (int i = 0; i < message.length(); i = i + 8)
fragmentedMessage.add(message.substring(i, i + 8));
System.out.println(fragmentedMessage);
return fragmentedMessage;
【问题讨论】:
你可以使用Iterator
,而不是for
循环,它有一个hasNext()
方法。
或者传统的for循环,它使用一个索引。
可能有更好的方法,这取决于您实际想要实现的目标。但你没有说...
How to get the last value of an ArrayList的可能重复
【参考方案1】:
没有直接的方法可以知道您在 foreach 循环中是否有 List
的最后一个条目。
最简单的方法是使用索引循环。
类似的东西:
List<String> fragmentMessage = fragmentMessage(message);
for (int i = 0; i < fragmentMessage.size(); i++)
String fragment = fragmentMessage.get(i);
/*
* If "fragment" is the last element of the array, then do something
*/
if (i == fragmentMessage.size()-1)
另一个选项是Iterator
for (Iterator<String> iterator = fragmentMessage(message).iterator();
iterator.hasNext();)
String fragment = iterator.next();
if (!iterator.hasNext())
【讨论】:
【参考方案2】:你有几个选择。
使用迭代器:
String message = "Who Framed Roger Rabbit?";
List<String> fragments = fragmentMessage(message);
Iterator<String> iterator = fragments.iterator();
while (iterator.hasNext())
System.out.println(iterator.next());
if (!iterator.hasNext())
System.out.println("All done!");
检查 for/each 循环中的索引:
for (String str :
fragments)
System.out.println(str);
// If this item is the last in the list
if (fragments.indexOf(str) == fragments.size() - 1)
System.out.println("All done!");
使用这种方法,如果您在列表中使用字符串,请注意如果有重复,这将不是很准确。
用标准for循环跟踪索引:
for (int i = 0; i < fragments.size(); i++)
System.out.println(fragments.get(i));
if (i == fragments.size() - 1)
System.out.println("All done!");
【讨论】:
【参考方案3】:我的最终解决方案如下所示。它基于 @k5_ 的回答,并归功于他/她/其他人。
我使用 if-else 语句仅定位最后一个元素。
List<String> fragmentMessage = fragmentMessage(message);
for (int i = 0; i < fragmentMessage.size(); i++)
String fragment = fragmentMessage.get(i);
if (message.isEmpty()) // Only if message == "".
System.out.println(createFrame(message));
else if (i == fragmentMessage.size() - 1) // Last element of the array.
System.out.println(createLastFrame(fragment));
else
System.out.println(createFrame(fragment)); // Only if message is not the last message.
【讨论】:
你考虑过最后一个元素也是空的情况吗? @k5_ 我看不到代码中最后一个元素可以为空的任何方式。有什么方法可以私下给你发我的课吗?以上是关于如何检测一个元素是不是是数组中的最后一个元素?的主要内容,如果未能解决你的问题,请参考以下文章