Java – how do I concatenate list items but use different delimiters for the last item?

The following list is given:

List and lt; String > Names = lists Newarraylist ("George", "John", "Paul", "Ringo")

I want to convert it to such a string:

George, John, Paul and Ringo

I can do this with a rather clumsy StringBuilder:

String nameList = names.stream().collect(joining(","));
        if (nameList.contains(",")) {
            StringBuilder builder = new StringBuilder(nameList);
            builder.replace(nameList.lastIndexOf(','),nameList.lastIndexOf(',') + 1," and");
            return builder.toString();
        }

Is there a more elegant way? I don't mind using the library if necessary

Notes:

>I can use the old for loop with index, but I'm not looking for such a solution > there is no comma in the value (name)

Solution

As you have completed most of the content, I will introduce the second method "replacelast", which is not in JDK for Java so far In lang.string:

import java.util.List;
import java.util.stream.Collectors;

public final class StringUtils {
 private static final String AND = " and ";
 private static final String COMMA = ",";

 // your initial call wrapped with a replaceLast call
 public static String asLiteralNumeration(List<String> strings) {
    return replaceLast(strings.stream().collect(Collectors.joining(COMMA)),COMMA,AND);
 }

 public static String replaceLast(String text,String regex,String replacement) {
    return text.replaceFirst("(?s)" + regex + "(?!.*?" + regex + ")",replacement);
 }
}

You can also change the separator and parameters Test your requirements so far:

@org.junit.Test
public void test() {
 List<String> names = Arrays.asList("George","John","Paul","Ringo");
 assertEquals("George,John,Paul and Ringo",StringUtils.asLiteralNumeration(names));

 List<String> oneItemList = Arrays.asList("Paul");
 assertEquals("Paul",StringUtils.asLiteralNumeration(oneItemList));

 List<String> emptyList = Arrays.asList("");
 assertEquals("",StringUtils.asLiteralNumeration(emptyList));

}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>