|
|
@@ -9,61 +9,41 @@ import org.apache.logging.log4j.LogManager;
|
|
|
import org.apache.logging.log4j.Logger;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import java.util.Locale;
|
|
|
+import java.util.Objects;
|
|
|
|
|
|
@Component
|
|
|
public class CapitaliseStringImpl implements CapitaliseString {
|
|
|
|
|
|
private static final Logger logger = LogManager.getLogger(CapitaliseStringImpl.class);
|
|
|
|
|
|
- @SuppressWarnings("DuplicatedCode")
|
|
|
@Override
|
|
|
public String capitalise(String input) {
|
|
|
logger.info("CapitaliseStringImpl::capitalise");
|
|
|
- if (input == null) {
|
|
|
- return "";
|
|
|
- } else if (input.length() < 3) {
|
|
|
- return input;
|
|
|
- } else {
|
|
|
- logger.debug("CapitalisationImpl::getCapitalisation");
|
|
|
- String[] parts = input.split(" ");
|
|
|
- StringBuilder result = new StringBuilder();
|
|
|
- for (String part : parts) {
|
|
|
- result.append(doPart(part)).append(" ");
|
|
|
- }
|
|
|
- result = new StringBuilder(result.toString().trim());
|
|
|
- parts = result.toString().split("-");
|
|
|
- if (parts.length > 1) {
|
|
|
- result = new StringBuilder();
|
|
|
- for (String part : parts) {
|
|
|
- if (!result.isEmpty()) {
|
|
|
- result = new StringBuilder(result.append("-"));
|
|
|
- }
|
|
|
- result.append(doPart(part));
|
|
|
+ StringBuilder result = new StringBuilder();
|
|
|
+ boolean newWord = true;
|
|
|
+ if (input != null && input.length() > 2) {
|
|
|
+ for (int i = 0; i < input.length(); i++) {
|
|
|
+ char c = input.charAt(i);
|
|
|
+ if (newWord) {
|
|
|
+ result.append(Character.toUpperCase(c));
|
|
|
+ } else {
|
|
|
+ result.append(c);
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- return result.toString();
|
|
|
- }
|
|
|
- }
|
|
|
+ newWord = characterInSeparators(c);
|
|
|
|
|
|
- @SuppressWarnings("DuplicatedCode")
|
|
|
- private String doPart(String input) {
|
|
|
- String result = input;
|
|
|
- if (input.length() >= 3) {
|
|
|
- String work = input.toLowerCase(Locale.ENGLISH);
|
|
|
- result = work.substring(0, 1).toUpperCase(Locale.ENGLISH) + work.substring(1);
|
|
|
- String prefix = result.substring(0, 2);
|
|
|
- String name = result.substring(2);
|
|
|
- if (prefix.equals("Mc")) {
|
|
|
- result = prefix + doPart(name);
|
|
|
- } else {
|
|
|
- prefix = result.substring(0, 3);
|
|
|
- if (prefix.equals("Mac")) {
|
|
|
- result = prefix + input.charAt(3) + result.substring(4);
|
|
|
+ if (result.toString().endsWith("Mc")) {
|
|
|
+ newWord = true;
|
|
|
}
|
|
|
}
|
|
|
+ return result.toString();
|
|
|
+ } else {
|
|
|
+ return Objects.requireNonNullElse(input, "");
|
|
|
}
|
|
|
- return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private boolean characterInSeparators(char c) {
|
|
|
+ return c == ' ' || c == '-';
|
|
|
}
|
|
|
}
|