/*
* Svjatoslav Commons - shared library of common functionality.
- * Copyright ©2012-2014, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ * Copyright ©2012-2017, 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
package eu.svjatoslav.commons.string;
-import java.util.Vector;
+import java.util.ArrayList;
+import java.util.List;
public class String2 {
- private final Vector<Character> chars = new Vector<>();
+ private final List<Character> chars = new ArrayList<>();
- public String2(final String value) {
- for (final Character c : value.toCharArray())
- chars.add(c);
+ public String2(String value) {
+ addSuffix(value);
}
public String2 addPrefix(final String prefix) {
- int j = 0;
+ if (prefix == null)
+ return this;
+
+ int i = 0;
for (final char c : prefix.toCharArray())
- chars.insertElementAt(c, j++);
+ chars.add(i++, c);
return this;
}
public String2 addSuffix(final String suffix) {
+ if (suffix == null)
+ return this;
+
for (final char c : suffix.toCharArray())
chars.add(c);
return this;
}
+ public String2 addSuffix(String separator, final String suffix) {
+ if (!isEmpty())
+ addSuffix(separator);
+
+ addSuffix(suffix);
+
+ return this;
+ }
+
/**
* Cut given amount of characters from the left of the string.
*
* @param cutAmount of characters to cut
* @return part that was cut.
*/
- public String trimLeft(final int cutAmount) {
+ public String2 trimPrefix(final int cutAmount) {
int actualCutAmount = cutAmount;
if (actualCutAmount > getLength())
actualCutAmount = getLength();
- final String result = getSubString(0, actualCutAmount);
-
chars.subList(0, actualCutAmount).clear();
- return result;
+ return this;
+ }
+
+ public String2 trimPrefixIfExists(String prefix) {
+ if (prefix == null)
+ return this;
+
+ if (hasPrefix(prefix))
+ trimPrefix(prefix.length());
+
+ return this;
+ }
+
+ public String2 trimSuffixIfExists(String suffix) {
+ if (hasSuffix(suffix))
+ trimSuffix(suffix.length());
+
+ return this;
+ }
+
+ public String2 trimSuffix(int charsToTrim) {
+
+ if (charsToTrim > chars.size()) {
+ chars.clear();
+ return this;
+ }
+
+ for (int i = 0; i < charsToTrim; i++)
+ chars.remove(chars.size() - 1);
+
+ return this;
+ }
+
+ public boolean hasSuffix(String suffix) {
+ return contains(suffix, getLength() - suffix.length());
+ }
+
+ public boolean hasPrefix(String prefix) {
+ return contains(prefix, 0);
+ }
+
+ public boolean contains(String fragment, int index) {
+ if (index + fragment.length() > chars.size())
+ return false;
+
+ for (int i = 0; i < fragment.length(); i++)
+ if (chars.get(index + i) != fragment.charAt(i))
+ return false;
+
+ return true;
}
public String2 enforceLength(final int targetLength) {