add methods: maskAndTruncate; nCopies; nCopiesWithGlue

This commit is contained in:
2025-01-23 09:32:46 -06:00
parent 6725704b13
commit 42a8d37493
2 changed files with 128 additions and 0 deletions

View File

@ -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)));
}
}

View File

@ -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));
}
}