[join-str-comma-and] Joining Strings follows natural language grammar (#14941)
This commit is contained in:
parent
268698089d
commit
24dcde3d6d
@ -0,0 +1,36 @@
|
||||
package com.baeldung.joinasnl;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class JoinStringsAsNaturalLangUnitTest {
|
||||
String joinItemsAsNaturalLanguage(List<String> list, boolean oxfordComma) {
|
||||
if (list.size() < 3) {
|
||||
return String.join(" and ", list);
|
||||
}
|
||||
// list has at least three elements
|
||||
int lastIdx = list.size() - 1;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
return sb.append(String.join(", ", list.subList(0, lastIdx)))
|
||||
.append(oxfordComma ? ", and " : " and ")
|
||||
.append(list.get(lastIdx))
|
||||
.toString();
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenCallingJoinByGrammar_thenGetTheExpectedResult() {
|
||||
assertEquals("", joinItemsAsNaturalLanguage(emptyList(), false));
|
||||
assertEquals("A", joinItemsAsNaturalLanguage(List.of("A"), false));
|
||||
assertEquals("A and B", joinItemsAsNaturalLanguage(List.of("A", "B"), false));
|
||||
assertEquals("A, B, C, D and I have a comma (,)", joinItemsAsNaturalLanguage(List.of("A", "B", "C", "D", "I have a comma (,)"), false));
|
||||
// with oxford comma = true
|
||||
assertEquals("", joinItemsAsNaturalLanguage(emptyList(), true));
|
||||
assertEquals("A", joinItemsAsNaturalLanguage(List.of("A"), true));
|
||||
assertEquals("A and B", joinItemsAsNaturalLanguage(List.of("A", "B"), true));
|
||||
assertEquals("A, B, C, D, and I have a comma (,)", joinItemsAsNaturalLanguage(List.of("A", "B", "C", "D", "I have a comma (,)"), true));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user