diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/StringUtils.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/StringUtils.java index 9382e5fc..84f893fb 100755 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/StringUtils.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/StringUtils.java @@ -23,6 +23,7 @@ package com.kingsrook.qqq.backend.core.utils; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -475,4 +476,59 @@ public class StringUtils return (s); } + + + /******************************************************************************* + ** + *******************************************************************************/ + public static String maskAndTruncate(String value) + { + return (maskAndTruncate(value, "** MASKED **", 6, 4)); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + public static String maskAndTruncate(String value, String mask, int minLengthToMask, int charsToShowOnEnds) + { + if(!hasContent(value)) + { + return (""); + } + + if(value.length() < minLengthToMask || value.length() < 2 * charsToShowOnEnds) + { + return mask; + } + + if(value.length() < charsToShowOnEnds * 3) + { + return (value.substring(0, charsToShowOnEnds) + mask); + } + + return (value.substring(0, charsToShowOnEnds) + mask + value.substring(value.length() - charsToShowOnEnds)); + } + + + + /*************************************************************************** + ** + ***************************************************************************/ + public static String nCopies(int n, String s) + { + return (nCopiesWithGlue(n, s, "")); + } + + + + /*************************************************************************** + ** + ***************************************************************************/ + public static String nCopiesWithGlue(int n, String s, String glue) + { + return (StringUtils.join(glue, Collections.nCopies(n, s))); + } + } diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/StringUtilsTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/StringUtilsTest.java index d0aae185..0f0f15ec 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/StringUtilsTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/utils/StringUtilsTest.java @@ -333,4 +333,76 @@ class StringUtilsTest extends BaseTest assertEquals("a", StringUtils.emptyToNull("a")); } + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testNCopies() + { + assertEquals("", StringUtils.nCopies(0, "a")); + assertEquals("a", StringUtils.nCopies(1, "a")); + assertEquals("aa", StringUtils.nCopies(2, "a")); + assertEquals("ab ab ab ", StringUtils.nCopies(3, "ab ")); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testNCopiesWithGlue() + { + assertEquals("", StringUtils.nCopiesWithGlue(0, "a", "")); + assertEquals("", StringUtils.nCopiesWithGlue(0, "a", ",")); + assertEquals("a", StringUtils.nCopiesWithGlue(1, "a", ",")); + assertEquals("aa", StringUtils.nCopiesWithGlue(2, "a", "")); + assertEquals("a,a", StringUtils.nCopiesWithGlue(2, "a", ",")); + assertEquals("ab ab ab", StringUtils.nCopiesWithGlue(3, "ab", " ")); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testMaskAndTruncate() + { + assertEquals("", StringUtils.maskAndTruncate(null)); + assertEquals("", StringUtils.maskAndTruncate("")); + assertEquals("** MASKED **", StringUtils.maskAndTruncate("1")); + assertEquals("** MASKED **", StringUtils.maskAndTruncate("12")); + assertEquals("** MASKED **", StringUtils.maskAndTruncate("123")); + assertEquals("** MASKED **", StringUtils.maskAndTruncate("1234")); + assertEquals("** MASKED **", StringUtils.maskAndTruncate("12345")); + assertEquals("** MASKED **", StringUtils.maskAndTruncate("123456")); + assertEquals("** MASKED **", StringUtils.maskAndTruncate("1234567")); + assertEquals("1234** MASKED **", StringUtils.maskAndTruncate("12345678")); + assertEquals("1234** MASKED **", StringUtils.maskAndTruncate("123456789")); + assertEquals("1234** MASKED **", StringUtils.maskAndTruncate("1234567890")); + assertEquals("1234** MASKED **", StringUtils.maskAndTruncate("12345678901")); + assertEquals("1234** MASKED **9012", StringUtils.maskAndTruncate("123456789012")); + assertEquals("1234** MASKED **6789", StringUtils.maskAndTruncate("123456789" + StringUtils.nCopies(100, "xyz") + "123456789")); + + assertEquals("***", StringUtils.maskAndTruncate("12", "***", 3, 1)); + assertEquals("1***3", StringUtils.maskAndTruncate("123", "***", 3, 1)); + assertEquals("1***4", StringUtils.maskAndTruncate("1234", "***", 3, 1)); + assertEquals("1***5", StringUtils.maskAndTruncate("12345", "***", 3, 1)); + assertEquals("12***", StringUtils.maskAndTruncate("12345", "***", 3, 2)); + assertEquals("12***56", StringUtils.maskAndTruncate("123456", "***", 3, 2)); + + assertEquals("***", StringUtils.maskAndTruncate("12", "***", 3, 4)); + assertEquals("***", StringUtils.maskAndTruncate("123", "***", 3, 4)); + assertEquals("***", StringUtils.maskAndTruncate("1234", "***", 3, 4)); + assertEquals("***", StringUtils.maskAndTruncate("12345", "***", 3, 4)); + assertEquals("***", StringUtils.maskAndTruncate("12345", "***", 3, 4)); + assertEquals("***", StringUtils.maskAndTruncate("123456", "***", 3, 4)); + assertEquals("1234***", StringUtils.maskAndTruncate("1234567890", "***", 3, 4)); + assertEquals("1234***", StringUtils.maskAndTruncate("12345678901", "***", 3, 4)); + assertEquals("1234***9012", StringUtils.maskAndTruncate("123456789012", "***", 3, 4)); + } + }