From 34ea17ffd028934a03fffc9a9b6195cc18eae5f7 Mon Sep 17 00:00:00 2001 From: Shekhar Gulati Date: Fri, 20 May 2016 18:37:38 +0530 Subject: [PATCH] Added support for `hexDecode` method. --- src/main/java/strman/Strman.java | 31 +++++++++++++++++++--------- src/test/java/strman/StrmanTest.java | 8 +++++++ 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/main/java/strman/Strman.java b/src/main/java/strman/Strman.java index c689ef8..0dbcaa8 100644 --- a/src/main/java/strman/Strman.java +++ b/src/main/java/strman/Strman.java @@ -329,11 +329,7 @@ public abstract class Strman { * @return The decoded String */ public static String binDecode(final String value) { - validate(value, NULL_STRING_PREDICATE, NULL_STRING_MSG_SUPPLIER); - return Arrays - .stream(value.split("(?<=\\G.{16})")) - .map(data -> String.valueOf(Character.toChars(Integer.parseInt(data, 2)))) - .collect(joining()); + return decodeStringToFormat(value, 16, 2); } /** @@ -354,11 +350,7 @@ public abstract class Strman { * @return decoded String */ public static String decDecode(final String value) { - validate(value, NULL_STRING_PREDICATE, NULL_STRING_MSG_SUPPLIER); - return Arrays - .stream(value.split("(?<=\\G.{5})")) - .map(data -> String.valueOf(Character.toChars(Integer.parseInt(data)))) - .collect(joining()); + return decodeStringToFormat(value, 5, 10); } /** @@ -440,6 +432,25 @@ public abstract class Strman { return result; } + /** + * Convert hexadecimal unicode (4 digits) string to string chars + * + * @param value The value to decode + * @return The decoded String + */ + public static String hexDecode(final String value) { + return decodeStringToFormat(value, 4, 16); + } + + private static String decodeStringToFormat(final String value, int digits, int radix) { + validate(value, NULL_STRING_PREDICATE, NULL_STRING_MSG_SUPPLIER); + return Arrays + .stream(value.split("(?<=\\G.{" + digits + "})")) + .map(data -> String.valueOf(Character.toChars(Integer.parseInt(data, radix)))) + .collect(joining()); + } + + public static String leftPad(final String value, final String pad, final int length) { validate(value, NULL_STRING_PREDICATE, NULL_STRING_MSG_SUPPLIER); if (value.length() >= length) { diff --git a/src/test/java/strman/StrmanTest.java b/src/test/java/strman/StrmanTest.java index 8eb2ed4..98a0cfe 100644 --- a/src/test/java/strman/StrmanTest.java +++ b/src/test/java/strman/StrmanTest.java @@ -342,4 +342,12 @@ public class StrmanTest { public void format_shouldThrowExceptionWhenValueDoesNotExist() throws Exception { assertThat(format("{1} {0}"), equalTo("{1} {0}")); } + + @Test + public void hexDecode_shouldDecodeHexCodeToString() throws Exception { + assertThat(hexDecode("6f22"), equalTo("漢")); + assertThat(hexDecode("0041"), equalTo("A")); + assertThat(hexDecode("00c1"), equalTo("Á")); + assertThat(hexDecode("00410041"), equalTo("AA")); + } } \ No newline at end of file