Dans un moment d'égarement, je viens de regarder en détail une des classes de mon projet qui est très utilisée. StringHelper...

Les 9/10è des fonctions présentes dans cette classes font les même choses que leurs homonymes dans StringUtils de Apache.commons-lang. La même chose, non, pas tout à fait, elles le font en moins bien codées...

Je vais vous fournir ici quelques unes des gemmes de cette classe, à vous de me trouver ce qui en fait des fonctions stupides par rapport à celles de StringUtils.

Facile :
	public static final boolean isBlank(final String str) {
		return str == null || str.trim().isEmpty();
	}
Dans la famille "je ne fais pas tout à fait ce que je dis que je fais" :
	public static final int compare(final String one, final String two) {
		if(one == two) {
			return 0;
		}
		if(one != null) {
			if(two != null) {
				return one.toUpperCase().trim().compareTo(two.toUpperCase().trim());
			}
			return -1;
		}
		return 1;
	}
Suivie dans la classe par "je fais ce que je dis que je fais" :
	public static final int compareIgnoreCase(
			final String one,
			final String two) {
		if(one == two) {
			return 0;
		}
		if(one != null) {
			if(two != null) {
				return one.compareToIgnoreCase(two);
			}
			return -1;
		}
		return 1;
	}
Et par "je le fais, mais je ne le fais pas vite" :
	public static final String concat(final String...strs) {
		if(strs != null) {
			final int nbStr = strs.length;
			if(nbStr > 0) {
				final StringBuilder sb = new StringBuilder();
				for(int index = 0; index < nbStr; ++index) {
					sb.append(strs[index]);
				}
				return sb.toString();
			}
		}
		return null;
	}
Et par "alors moi je suis méga pas pressé, le CPU et la RAM je m'en cogne, alors je m'éclate" :
	public static final boolean isNumber(final String str) {
		if(str != null) {
			return str.matches("[0-9]*");
		}
		return false;
	}
Un petit peu plus compliqué :
	public static String rightPad(String stringToPad, String padder, int size) {
		if (padder.length() == 0) {
			return stringToPad;
		}
		StringBuffer strb = new StringBuffer(stringToPad);
		StringCharacterIterator sci = new StringCharacterIterator(padder);

		while (strb.length() < size) {
			for (char ch = sci.first(); ch != CharacterIterator.DONE; ch = sci
					.next()) {
				if (strb.length() < size) {
					strb.append(String.valueOf(ch));
				}
			}
		}
		return strb.toString();
	}
Une de mes préférées :
	public static <T> String loopAppender(
			final Iterable<T> iterable,
			final CollectionHelper.Stringuifier<T> stringuifier,
			final String appender
	) {
		final StringBuilder sb = new StringBuilder();
		if(iterable != null) {
			final Iterator<T> it = iterable.iterator();
			while(it.hasNext()) {
				sb.append(stringuifier.stringuify(it.next())).append(appender);
			}
			cleanStringBuilder(sb, appender);
		}
		return sb.toString();
	}

	public static void cleanStringBuilder(
			final StringBuilder sb,
			final String appender
	) {
		final int finalSize= sb.length() - appender.length();
		if (finalSize > 0) {
			sb.setLength(finalSize);
		}
	}
Suivi par une téléportation rapide dans NumberUtils (ou alors les int sont des String travesties ???) :
	private static final int minimum(final int a, final int b, final int c) {
		return Math.min(a, Math.min(b, c));
	}

Bref, arrêtez de recoder des trucs qui existent dans des jar classiques, surtout quand ces jar fournissent des méthodes bien plus efficaces que les vôtres ! Sachez reconnaître que des fonctions existantes depuis des dizaines d'années et utilisée par des dizaines de milliers de développeurs sont sûrement plus efficace que les votre! Surtout quand votre projet inclus déjà ces JARs !!! Et oui StringHelper existe alors que apache.commons-lang est dans les dépendances du projet. sic...

Cela dit c'est peut être un autre problème qui est à la source de cette aberration : les développeurs ont peut être juste oublié de chercher sur internet s'il n'existait pas déjà quelque chose qui faisait ce qu'ils voulaient faire et du coup ont codé ces fonctions la tête dans le guidon! C'est mal!