From 8e8c4c07c4f56b28b5057efee7d790410c9305e3 Mon Sep 17 00:00:00 2001 From: Shekhar Gulati Date: Mon, 16 May 2016 19:26:15 +0530 Subject: [PATCH] Added support for `binEncode` --- src/main/java/strman/Strman.java | 22 +++++++++++++++++++++- src/test/java/strman/StrmanTest.java | 15 +++++++++++---- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/main/java/strman/Strman.java b/src/main/java/strman/Strman.java index 47834f9..b54d39b 100644 --- a/src/main/java/strman/Strman.java +++ b/src/main/java/strman/Strman.java @@ -6,6 +6,7 @@ import java.util.Optional; import java.util.StringJoiner; import java.util.function.Predicate; import java.util.function.Supplier; +import java.util.stream.Stream; import static java.util.stream.Collectors.joining; @@ -329,10 +330,29 @@ public abstract class Strman { 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)))) + .map(data -> String.valueOf(Character.toChars(Integer.parseInt(data, 2)))) .collect(joining()); } + /** + * Convert string chars to binary unicode (16 digits) + * + * @param value The value to encode + * @return String in binary format + */ + public static String binEncode(final String value) { + validate(value, NULL_STRING_PREDICATE, NULL_STRING_MSG_SUPPLIER); + return value.chars().mapToObj(ch -> leftPad(Integer.toBinaryString(ch), "0", 16)).collect(joining()); + } + + public static String leftPad(String value, String pad, int length) { + validate(value, NULL_STRING_PREDICATE, NULL_STRING_MSG_SUPPLIER); + if (value.length() >= length) { + return value; + } + return append(Stream.generate(() -> pad).limit(length - value.length()).collect(joining()), value); + } + private static long countSubstr(String value, String subStr, boolean allowOverlapping, long count) { int position = value.indexOf(subStr); diff --git a/src/test/java/strman/StrmanTest.java b/src/test/java/strman/StrmanTest.java index 90993fc..0cb6432 100644 --- a/src/test/java/strman/StrmanTest.java +++ b/src/test/java/strman/StrmanTest.java @@ -270,10 +270,17 @@ public class StrmanTest { binDecode("000000000111001100000000011101000000000001110010000000000110110100000000011000010000000001101110"), equalTo("strman")); - assertThat(binDecode("0110111100100010"),equalTo("漢")); - assertThat(binDecode("0000000001000001"),equalTo("A")); - assertThat(binDecode("0000000011000001"),equalTo("Á")); - assertThat(binDecode("00000000010000010000000001000001"),equalTo("AA")); + assertThat(binDecode("0110111100100010"), equalTo("漢")); + assertThat(binDecode("0000000001000001"), equalTo("A")); + assertThat(binDecode("0000000011000001"), equalTo("Á")); + assertThat(binDecode("00000000010000010000000001000001"), equalTo("AA")); + } + @Test + public void binEncode_shouldEncodeAStringToBinaryFormat() throws Exception { + assertThat(binEncode("漢"), equalTo("0110111100100010")); + assertThat(binEncode("A"), equalTo("0000000001000001")); + assertThat(binEncode("Á"), equalTo("0000000011000001")); + assertThat(binEncode("AA"), equalTo("00000000010000010000000001000001")); } } \ No newline at end of file