user5083862
user5083862

Reputation: 67

How to add string in the last foreach item?

I want to append certain string in the last item of the foreach array.

The program works perfectly fine. Given the items in the "pending" array, it should append the out value in the last item in the pending value:

String a = out + "-" + rptdate + "-";
for (String pn : pending) {
    //checks if total value + pending length value is less than 160
    if (a.length() + pn.length() < 160) { // < to leave room for the comma as well
        if (a.length() != 0) {
            if (a.length() != 14) {
                a += ",";
            }
        }

        a += pn;
    } else {
        resultingStrings.add(a);
        a = pn;
        Log.d("messages", a);
    }
}
resultingStrings.add(a);
for (String r : resultingStrings) {
    sendSMS(r);
}

Upvotes: 0

Views: 177

Answers (3)

Paul Henry
Paul Henry

Reputation: 375

If all you need to do is grab the last element of a Collection and append some text to it then this should work.

String out = "Some value";    
int lastIndex = pending.getSize() -1; // < 0 indexed
String lastItem = pending.get(lastIndex)
String newLastItem = lastItem + out; // < String concatenation

but from your snippet I don't think that's what your after because if we remove some of the magic numbers and correct the indentation, and make some assumptions about what your trying to do your left with

String a = out + "-" + rptdate + "-";
int prefixLength = a.length();
for (String pn : pending) {
    //checks if total value + pending length value is less than 160
    if (a.length() + pn.length() < MAX_LENGTH) { // < to leave room for the comma as well
        if (a.length() > prefixLength) {
            a += ",";
        }

        a += pn;
    } else {
        // have string longer than max length, so save and start a new sms.
        resultingStrings.add(a);
        Log.d("messages", a); // < log a before you overwrite it.
        a = pn;
    }
}

// DO YOU WANT TO APPEND out AS A SUFFIX TO a HERE ???
// a += out;
// but if so youll want to consider the case if a is now > MAX_LENGTH

resultingStrings.add(a); // add the last string

// send all composed strings
for (String r : resultingStrings) {
    sendSMS(r);
}

I am picking your relatively new to coding so I'd suggest first you start off with some pseudo-code of what your trying to do, it can then become comments in your code. Always keep your code formatted nicely so that indents are matched, and use descriptive names for your variables, and constants.

Upvotes: 1

Achintha Gunasekara
Achintha Gunasekara

Reputation: 1165

You could also do,

for(int i = 0; i < array.length; i++) {

    if(i = (array.length - 1)) {

        //this is the last element in the array
    }
}

Upvotes: 1

Linh
Linh

Reputation: 60913

Try simple code

int size = pending.size();
int index = 0;
for (String pn : pending) {
    if(index == size - 1){
      // it is last foreach => add your last string here
    }
    index++;    
    ...
}

Hope this help

Upvotes: 1

Related Questions