CapitalisationImpl.java 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. * Copyright (c) 2025. Andrew Grant Carrick Software. All rights reserved
  3. *
  4. */
  5. package scot.carricksoftware.grants.converters.capitalisation;
  6. import org.apache.logging.log4j.LogManager;
  7. import org.apache.logging.log4j.Logger;
  8. import org.springframework.stereotype.Component;
  9. import java.util.Locale;
  10. @SuppressWarnings("DuplicatedCode")
  11. @Component
  12. public class CapitalisationImpl implements Capitalisation {
  13. private static final Logger logger = LogManager.getLogger(CapitalisationImpl.class);
  14. @Override
  15. public String getCapitalisation(String input) {
  16. if (input == null) {
  17. return "";
  18. } else if (input.length() < 3) {
  19. return input;
  20. } else {
  21. logger.debug("CapitalisationImpl::getCapitalisation");
  22. String[] parts = input.split(" ");
  23. StringBuilder result = new StringBuilder();
  24. for (String part : parts) {
  25. result.append(doPart(part)).append(" ");
  26. }
  27. result = new StringBuilder(result.toString().trim());
  28. parts = result.toString().split("-");
  29. if (parts.length > 1) {
  30. result = new StringBuilder();
  31. for (String part : parts) {
  32. if (!result.isEmpty()) {
  33. result = new StringBuilder(result.append("-"));
  34. }
  35. result.append(doPart(part));
  36. }
  37. }
  38. return result.toString();
  39. }
  40. }
  41. private String doPart(String input) {
  42. String result = input;
  43. if (input.length() >= 3) {
  44. String work = input.toLowerCase(Locale.ENGLISH);
  45. result = work.substring(0, 1).toUpperCase(Locale.ENGLISH) + work.substring(1);
  46. String prefix = result.substring(0, 2);
  47. String name = result.substring(2);
  48. if (prefix.equals("Mc")) {
  49. result = prefix + doPart(name);
  50. } else {
  51. prefix = result.substring(0, 3);
  52. if (prefix.equals("Mac")) {
  53. result = prefix + input.charAt(3) + result.substring(4);
  54. }
  55. }
  56. }
  57. return result;
  58. }
  59. }