Reputation: 59
The code below splits a String based on its position and then puts it into an ArrayList.
So for example, if the String is "Who Framed Roger Rabbit?"
, then fragmentMessage
will split the message at every 8th character.
So the ArrayList will look like this: [Who Fram, ed Roger, Rabbit?]
The elements of the ArrayList are as follows:
Who Fram
ed Roger
Rabbit?
I then have a for-each loop in the main method which iterates over the ArrayList.
How can I detect if I have reached the last element of the array when iterating?
So for example, "if this is the last element of the array, then print "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;
}
}
Upvotes: 3
Views: 24804
Reputation: 10253
You have a few options.
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 (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!");
}
}
With this method, if you're using strings in your list, just be aware that if there are duplicates, this will not be very accurate.
for (int i = 0; i < fragments.size(); i++) {
System.out.println(fragments.get(i));
if (i == fragments.size() - 1) {
System.out.println("All done!");
}
}
Upvotes: 5
Reputation: 59
My final solution looks like this. It is based off @k5_ answer and credit goes to him/her/other.
I used an if-else statement to only target the last element.
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.
}
}
Upvotes: 0
Reputation: 5558
There is no direct method to know if you have the last entry of a List
in a foreach loop.
The easiest would be to use an indexed-loop.
Something like that:
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) {
}
}
Another option would be an Iterator
for (Iterator<String> iterator = fragmentMessage(message).iterator();
iterator.hasNext();) {
String fragment = iterator.next();
if (!iterator.hasNext()) {
}
}
Upvotes: 7