From a10b74a05e9aecc78e1e983025d1933b91e076da Mon Sep 17 00:00:00 2001 From: Svjatoslav Agejenko Date: Fri, 14 Mar 2014 20:34:55 +0200 Subject: [PATCH] Renamed CuttableString to more generic String2. Added prefix, suffix support and length enforcing possibility. --- .../commons/string/CuttableString.java | 49 ---------- .../eu/svjatoslav/commons/string/String2.java | 89 +++++++++++++++++++ ...ttableStringTest.java => String2Test.java} | 23 ++++- 3 files changed, 110 insertions(+), 51 deletions(-) delete mode 100755 src/main/java/eu/svjatoslav/commons/string/CuttableString.java create mode 100755 src/main/java/eu/svjatoslav/commons/string/String2.java rename src/test/java/eu/svjatoslav/commons/string/{CuttableStringTest.java => String2Test.java} (59%) diff --git a/src/main/java/eu/svjatoslav/commons/string/CuttableString.java b/src/main/java/eu/svjatoslav/commons/string/CuttableString.java deleted file mode 100755 index 278673b..0000000 --- a/src/main/java/eu/svjatoslav/commons/string/CuttableString.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Svjatoslav Commons - shared library of common functionality. - * Copyright ©2012-2014, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 3 of the GNU Lesser General Public License - * or later as published by the Free Software Foundation. - */ - -package eu.svjatoslav.commons.string; - -public class CuttableString { - - private String value; - - public CuttableString(final String value) { - this.value = value; - } - - /** - * Cut given amount of characters from the left of the string. Return cutted - * part. - */ - public String cutLeft(final int cutAmount) { - - int actualCutAmount = cutAmount; - - if (actualCutAmount > value.length()) - actualCutAmount = value.length(); - - final String result = value.substring(0, actualCutAmount); - - value = value.substring(actualCutAmount); - - return result; - } - - public int getLength() { - return value.length(); - }; - - public String getValue() { - return value; - } - - public boolean isEmpty() { - return value.length() == 0; - } -} diff --git a/src/main/java/eu/svjatoslav/commons/string/String2.java b/src/main/java/eu/svjatoslav/commons/string/String2.java new file mode 100755 index 0000000..fe83ade --- /dev/null +++ b/src/main/java/eu/svjatoslav/commons/string/String2.java @@ -0,0 +1,89 @@ +/* + * Svjatoslav Commons - shared library of common functionality. + * Copyright ©2012-2014, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 3 of the GNU Lesser General Public License + * or later as published by the Free Software Foundation. + */ + +package eu.svjatoslav.commons.string; + +import java.util.Vector; + +public class String2 { + + private final Vector chars = new Vector(); + + public String2(final String value) { + for (final Character c : value.toCharArray()) + chars.add(c); + } + + public String2 addPrefix(final String prefix) { + int j = 0; + for (final char c : prefix.toCharArray()) + chars.insertElementAt(c, j++); + + return this; + } + + public String2 addSuffix(final String suffix) { + for (final char c : suffix.toCharArray()) + chars.add(c); + + return this; + } + + /** + * Cut given amount of characters from the left of the string. Return cutted + * part. + */ + public String cutLeft(final int cutAmount) { + + int actualCutAmount = cutAmount; + + if (actualCutAmount > getLength()) + actualCutAmount = getLength(); + + final String result = getSubString(0, actualCutAmount); + + chars.subList(0, actualCutAmount).clear(); + + return result; + } + + public void enforceLength(final int targetLength) { + if (getLength() > targetLength) + chars.subList(targetLength, getLength()).clear(); + else if (getLength() < targetLength) { + final int charactersToAdd = targetLength - getLength(); + for (int i = 0; i < charactersToAdd; i++) + chars.add(' '); + } + } + + public int getLength() { + return chars.size(); + } + + public String getSubString(final int startInclusive, final int endExclusive) { + final char[] charArray = new char[endExclusive - startInclusive]; + + int j = 0; + for (int i = startInclusive; i < endExclusive; i++) { + charArray[j] = chars.get(i); + j++; + } + return new String(charArray); + } + + public boolean isEmpty() { + return chars.size() == 0; + } + + @Override + public String toString() { + return getSubString(0, chars.size()); + } +} diff --git a/src/test/java/eu/svjatoslav/commons/string/CuttableStringTest.java b/src/test/java/eu/svjatoslav/commons/string/String2Test.java similarity index 59% rename from src/test/java/eu/svjatoslav/commons/string/CuttableStringTest.java rename to src/test/java/eu/svjatoslav/commons/string/String2Test.java index 6e9444d..f13d0d2 100755 --- a/src/test/java/eu/svjatoslav/commons/string/CuttableStringTest.java +++ b/src/test/java/eu/svjatoslav/commons/string/String2Test.java @@ -13,12 +13,12 @@ import static org.junit.Assert.assertEquals; import org.junit.Test; -public class CuttableStringTest { +public class String2Test { @Test public void testCutLeft() { - final CuttableString s = new CuttableString("this is a test"); + final String2 s = new String2("this is a test"); assertEquals("this ", s.cutLeft(5)); assertEquals("is ", s.cutLeft(3)); @@ -27,4 +27,23 @@ public class CuttableStringTest { assertEquals("", s.cutLeft(5)); } + + @Test + public void testEnforceLength() { + final String2 s = new String2("12345678"); + s.enforceLength(3); + assertEquals("123", s.toString()); + + s.enforceLength(5); + assertEquals("123 ", s.toString()); + } + + @Test + public void testSuffexAndPrefix() { + final String2 s = new String2("experiment"); + s.addPrefix("The ").addSuffix(" !"); + + assertEquals("The experiment !", s.toString()); + } + } -- 2.20.1