1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| package rom.utilities;
import java.lang.ref.SoftReference;
/**
* Cette classe n'est composée que de méthodes statiques, utiles pour certains traitements de
* chaînes de caractères.
*
* @author <a href="mailto:rom1v@yahoo.fr">Romain Vimont</a> (rom1v)
*/
public final class StringUtilities {
/** Contient à l'indice (int)c - 192 la chaîne par lequel remplacer le caractère c. */
private static SoftReference<String[]> charMap;
/** Interdiction d'instancier. */
private StringUtilities() {}
/**
* Nettoie la chaîne de caractères des caractères spéciaux (accents, etc...).
*
* @param source
* Chaîne de caractères à nettoyer.
* @return Chaîne de caractères nettoyée.
* @throws NullPointerException
* si la chaîne source est {@code null}.
*/
public static String cleanSpecialCharacters(String source) {
if (source == null)
throw new NullPointerException();
String[] map = null;
StringBuilder builder = new StringBuilder();
for (char c : source.toCharArray()) {
if (c < 192 || c >= 256) {
/* Si le caractère n'est pas un caractère spécial, on l'ajoute tel quel. */
builder.append(c);
} else {
if (map == null) {
/*
* Si le tableau n'est pas encore chargé dans la méthode, on le récupère en
* mémoire.
*/
if (charMap != null)
map = charMap.get();
if (map == null) {
/* Si le tableau n'est pas disponible en mémoire, on le charge. */
map = buildCharMap();
charMap = new SoftReference<String[]>(map);
}
}
/*
* On ajoute à la chaîne de caractère la chaîne qui doit remplacer le caractère
* spécial.
*/
builder.append(map[c - 192]);
}
}
return new String(builder);
}
/**
* Retourne une chaîne de caractères correspondant à la source dans laquelle les espaces de
* début et de fin sont supprimés, et où les espaces consécutifs sont remplacés par un seul
* espace.
* <p>
* Par exemple, {@code removeExtraSpaces(" a bcd e f g ")} retourne {@code a bcd e f g}.
*
* @param source
* Chaîne de caractère source.
* @return Chaîne de caractères dans laquelle les espaces en trop ont été supprimés.
* @throws NullPointerException
* si la source est {@code null}.
*/
public static String removeExtraSpaces(String source) {
if (source == null) {
throw new NullPointerException();
}
return source.trim().replaceAll("\\s{2,}", " ");
}
/**
* Retourne la chaîne de caractères tronquée à {@code maxSize} caractères. Si la chaîne était
* plus petite que {@code maxSize}, elle est renvoyée telle-quelle.
*
* @param s
* Chaîne de caractères à tronquer.
* @param maxSize
* Taille maximale de la chaîne à obtenir.
* @return Chaîne de caractères tronquée.
* @throws NullPointerException
* si la chaîne est {@code null}.
* @throws IllegalArgumentException
* si la taille maximale n'est pas strictement positive.
*/
public static String getTruncatedString(String s, int maxSize) {
if (s == null) {
throw new NullPointerException();
}
if (maxSize <= 0) {
throw new IllegalArgumentException("La taille maximale doit être strictement positive : " + maxSize + ".");
}
String result;
int nameLength = s.length();
if (nameLength > maxSize)
result = s.substring(0, nameLength);
else
result = s;
return result;
}
/**
* Construit le tableau de correspondance de remplacement.
*
* @return Tableau de correspondance de remplacement.
*/
private static String[] buildCharMap() {
/* On retourne le tableau des correspondances des caractères 192 à 255. */
return new String[] { "A", "A", "A", "A", "A", "A", "AE", "C", "E", "E", "E", "E", "I", "I", "I", "I", "D", "N", "O", "O", "O", "O", "*", "0", "U", "U", "U", "U", "Y", "D", "B", "a", "a", "a", "a", "a", "a", "ae", "c", "e", "e", "e", "e", "i", "i", "i", "i", "o", "n", "o", "o", "o", "o", "o", "/", "0", "u", "u", "u", "u", "y", "D", "y" };
}
} |