Merge pull request #15938 from yadavan88/BAEL-7588

Added code sample and test for getting initials for a name
This commit is contained in:
Dominique Plante 2024-03-06 20:32:48 -08:00 committed by GitHub
commit 1ce195f8df
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,99 @@
package com.baeldung.initials;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static com.baeldung.initials.InitialFinder.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class GetInitialsFromNameUnitTest {
@ParameterizedTest
@CsvSource({"John F Kennedy,JFK", ",''", "'',''", "Not Correct 88text,NC", "michael jackson,MJ", "123,''", "123 234A,''", "1test 2test, ''"})
public void getInitialFromName_usingLoop(String input, String expected) {
String initial = getInitialUsingLoop(input);
assertEquals(expected, initial);
}
@ParameterizedTest
@CsvSource({"John F Kennedy,JFK", ",''", "'',''", "Not Correct 88text,NC", "michael jackson,MJ", "123,''", "123 234A,''", "1test 2test, ''"})
public void getInitialFromName_usingStringTokenizer(String input, String expected) {
String initial = getInitialUsingStringTokenizer(input);
assertEquals(expected, initial);
}
@ParameterizedTest
@CsvSource({"John F Kennedy,JFK", ",''", "'',''", "Not Correct 88text,NC", "michael jackson,MJ", "123,''", "123 234A,''", "1test 2test, ''"})
public void getInitialFromName_usingRegex(String input, String expected) {
String initial = getInitialUsingRegex(input);
assertEquals(expected, initial);
}
@ParameterizedTest
@CsvSource({"John F Kennedy,JFK", ",''", "'',''", "Not Correct 88text,NC", "michael jackson,MJ", "123,''", "123 234A,''", "1test 2test, ''"})
public void getInitialFromName_usingStreamsAPI(String input, String expected) {
String initial = getInitialUsingStreamsAPI(input);
assertEquals(expected, initial);
}
}
class InitialFinder {
public static String getInitialUsingLoop(String name) {
if (name == null || name.isEmpty()) {
return "";
}
String[] parts = name.split("\\s+");
StringBuilder initials = new StringBuilder();
for (String part : parts) {
if (part.matches("[a-zA-Z].*")) {
initials.append(part.charAt(0));
}
}
return initials.toString().toUpperCase();
}
public static String getInitialUsingStringTokenizer(String name) {
if (name == null || name.isEmpty()) {
return "";
}
StringTokenizer tokenizer = new StringTokenizer(name);
StringBuilder initials = new StringBuilder();
while (tokenizer.hasMoreTokens()) {
String part = tokenizer.nextToken();
if (part.matches("[a-zA-Z].*")) {
initials.append(part.charAt(0));
}
}
return initials.toString().toUpperCase();
}
public static String getInitialUsingRegex(String name) {
if (name == null || name.isEmpty()) {
return "";
}
Pattern pattern = Pattern.compile("\\b[a-zA-Z]");
Matcher matcher = pattern.matcher(name);
StringBuilder initials = new StringBuilder();
while (matcher.find()) {
initials.append(matcher.group());
}
return initials.toString().toUpperCase();
}
public static String getInitialUsingStreamsAPI(String name) {
if (name == null || name.isEmpty()) {
return "";
}
return Arrays.stream(name.split("\\s+"))
.filter(part -> part.matches("[a-zA-Z].*"))
.map(part -> part.substring(0, 1))
.collect(Collectors.joining())
.toUpperCase();
}
}