Code: Alles auswählen
import java.util.Arrays;
import java.util.Iterator;
public class StringUtils {
/* ich will das:
*
* def join(seq, sep, width=0):
* return sep.join(str(e).rjust(width) for e in seq)
*/
//TODO: padding
public static String join(Iterable<? extends Object> pColl, String separator, int padWidth) {
Iterator<? extends Object> oIter;
if (pColl == null || (!(oIter = pColl.iterator()).hasNext()))
return "";
StringBuilder oBuilder = new StringBuilder(String.valueOf(oIter.next()));
while (oIter.hasNext())
oBuilder.append(separator).append(oIter.next());
return oBuilder.toString();
}
public static String join(Iterable<? extends Object> pColl, String separator) {
return join(pColl, separator, 0);
}
/** Warum ist weder String iterable, noch java.text.StringCharacterIterator? */
public static String join(String pColl, String separator, int padWidth) {
return join(new StringCharacterIterabletor(pColl), separator, padWidth);
}
public static String join(String pColl, String separator) {
return join(pColl, separator, 0);
}
/** Warum sind Arrays nicht iterable und primitive[] keine validen Argumente für Arrays.asList? */
public static String join(Object[] pColl, String separator, int padWidth) {
return join(Arrays.asList(pColl), separator, padWidth);
}
public static String join(Object[] pColl, String separator) {
return join(pColl, separator, 0);
}
public static class StringCharacterIterabletor implements Iterator<Character>, Iterable<Character> {
private final String string;
private int pos = -1;
public StringCharacterIterabletor(String string) {this.string = string;}
@Override public boolean hasNext() {
return this.pos < this.string.length() - 1;
}
@Override public Character next() {
return string.charAt(++this.pos);
}
/** Warum spezifiziert das Interface diese Methode, wenn es auch spezifiziert,
* dass man sie auch die Exception schmeißen lassen kann, wenn man Bock hat? */
@Override public void remove() {
throw new UnsupportedOperationException();
}
/** Okay, ich hab gecheated, eigentlich brauch ich noch ne Klasse… */
@Override public Iterator<Character> iterator() {
return this;
}
}
}