如何检测一个元素是否是数组中的最后一个元素?

3
以下代码将根据其位置拆分字符串,然后将其放入ArrayList中。
例如,如果字符串是“Who Framed Roger Rabbit?”,则fragmentMessage将在每个第8个字符处拆分该消息。
因此,ArrayList将如下所示:[Who Fram, ed Roger, Rabbit?]
ArrayList的元素如下:
1. ArrayList元素0:Who Fram 2. ArrayList元素1:ed Roger 3. ArrayList元素2:Rabbit?
然后,在主方法中有一个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;
}
}

1
你可以使用Iterator代替for循环,因为它有一个hasNext()方法。 - Zephyr
1
或者使用索引的传统for循环。 - JB Nizet
1
可能有更好的方法,这取决于您实际想要实现什么。但是您没有说... - JB Nizet
可能是如何获取ArrayList的最后一个值的重复问题。 - Justinas Jakavonis
3个回答

6

在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()) {

        }
    }

5
你有几个选项。

使用迭代器:

    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!");
        }
    }

0

我的最终解决方案看起来像这样。它基于@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_
@k5_ 我无法看到代码中最后一个元素为空的任何方式。我可以私下给你发送我的类吗? - 48502104

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接