benou | un cado pour HFR : je suis en train de me faire des classes utilitaires. Vous savez, le genre de trucs dont on a tout le temps besoin et dont on fait des gros copier/coller pas beau pour le mettre dans chacun de nos projets.
bref, la dedans, tu vas trouver une fonction equalsIgnoreCase qui fait ce que tu voulais faire avec ton case avec une ecriture simplifiée par rapport à plein de if.
Regarde la méthode testEquals pour voir le fonctionnement :
Code :
- package utils;
- import java.util.*;
- public class StringUtils {
- public static String replace(String s, String replaced, String replacing) {
- StringBuffer tmp = new StringBuffer(s);
- int i = 0, debut, fin;
- char c = replaced.charAt(0);
- while (i < tmp.length()) {
- while ((i < tmp.length()) && (tmp.charAt(i) != c))
- i++;
- debut = i;
- i++;
- fin = 1;
- while ((i < tmp.length()) && (fin < replaced.length()) && (tmp.charAt(i) == replaced.charAt(fin))) {
- fin++;
- i++;
- }
- if ((i <= tmp.length()) && (fin == replaced.length())) {
- tmp.replace(debut, debut+fin, replacing);
- i = debut + replacing.length();
- }
- }
- return tmp.toString();
- }
- public static void testReplace () {
- String s = "coucou, comment ca va ?";
- String replaced = "co";
- String replacing = "111";
- System.out.println(replace(s, replaced, replacing));
- }
- public static final boolean BEFORE = true;
- public static final boolean AFTER = false;
- public static String format (String mes, int lgth, char space, boolean before) {
- char[] buf = new char[lgth];
- int i;
- if (before) {
- for (i = 0; i < lgth-mes.length(); i++)
- buf[i] = space;
- for (int j=0; j<mes.length(); i++,j++)
- buf[i] = mes.charAt(j);
- } else {
- for (i = 0; (i < mes.length()) && (i<lgth); i++)
- buf[i] = mes.charAt(i);
- for (i = 0; i < lgth; i++)
- buf[i] = space;
- }
- return new String(buf);
- }
- /*
- retourne une chaine de longueur lgth contenant le mes ou le mes raccourcit s'il ne rentre pas entierement
- */
- public static String format (String mes, int lgth) {
- char[] buf = new char[lgth];
- int i;
- for (i = 0; (i < mes.length()) && (i<lgth); i++) {
- buf[i] = mes.charAt(i);
- }
- for (; i < lgth; i++) {
- buf[i] = ' ';
- }
- if (mes.length() > lgth)
- for (i = (lgth-3<0)?0:lgth-3; i <lgth; i++) {
- buf[i] = '.';
- }
- return new String(buf);
- }
- /**
- identique au java.util.String.startsWith avec un paramètre from en plus.
- */
- public static final boolean startsWith(String in, String begin, int from) {
- if (in.length() < from + begin.length()) {
- return false;
- }
- for (int i =0; i < begin.length(); i++) {
- if (in.charAt(from+i) != begin.charAt(i))
- return false;
- }
- return true;
- }
- /**
- identique au java.util.String.startsWith avec un paramètre from en plus et qui est
- case-insensitive
- */
- public static final boolean startsWithIgnoreCase(String in, String begin, int from) {
- if (in.length() < from + begin.length()) {
- return false;
- }
- char c;
- for (int i =0; i < begin.length(); i++) {
- c = in.charAt(from+i);
- if (Character.toUpperCase(in.charAt(from+i)) != Character.toUpperCase(begin.charAt(i)))
- return false;
- }
- return true;
- }
- public static final boolean startsWithIgnoreCase(String in, String begin) {
- return startsWithIgnoreCase(in, begin, 0);
- }
- public static final boolean endsWithIgnoreCase(String in, String end) {
- return startsWithIgnoreCase(in, end, in.length() - end.length());
- }
- /**
- teste si la chaine s est égale à une des chaines du tableau
- retourne -1 si non, ou l'index de la chaine en question si oui
- */
- public static int equals(String s, String[] to) {
- return equals(s, to, stringComp);
- }
- private static final Comparator stringComp = new StringComparator();
- /**
- teste si la chaine s est égale à une des chaines du tableau sans
- tenir compet de la case
- retourne -1 si non, ou l'index de la chaine en question si oui
- */
- public static int equalsIgnoreCase(String s, String[] to) {
- return equals(s, to, ignoreCaseStringComp);
- }
- private static final Comparator ignoreCaseStringComp = new IgnoreCaseStringComparator();
- /**
- teste si la chaine s est égale à une des chaines du tableau, en utilisant le
- comparateur du tableau. <br>
- <b> attention </b> : Pour des raison d'optimisation, cette fonction
- considère que 1 objet null est égal à un autre objet si et seulement si l'autre objet est null
- retourne -1 si non, ou l'index de la chaine en question si oui
- */
- public static int equals(String s, String[] to, Comparator comp) {
- if (s == null) {
- for (int i =0; i < to.length; i++) {
- if (to[i] == null) {
- return i;
- }
- }
- return -1;
- }
- for (int i = 0; i < to.length; i++) {
- if (comp.compare(s, to[i]) == 0) {
- return i;
- }
- }
- return -1;
- }
- public static void testEquals () {
- String s = "oUi";
- if (equals(s, new String[] {"o", "O", "oui", "OUI", "Oui"}) != -1) {
- System.out.println("s = affirmatif (equals)" );
- } else {
- System.out.println("s != affirmatif (equals)" );
- }
-
- if (equalsIgnoreCase(s, new String[] {"o","oui"}) != -1) {
- System.out.println("s = affirmatif (equalsIgnoreCase)" );
- } else {
- System.out.println("s != affirmatif (equalsIgnoreCase)" );
- }
- }
-
-
- public static void main (String[] args) {
- testEquals();
- }
-
- }
- /** est utilisée dans StringUtils.equals(String, String[]) */
- final class StringComparator implements Comparator {
- public int compare(Object a, Object b) { return ((String) a).compareTo((String) b); }
- }
- /** est utilisée dans StringUtils.equalsIgnoreCase(String, String[]) */
- final class IgnoreCaseStringComparator implements Comparator {
- /** <b>utilisé uniquement pour le test d'égalité !!!!</b> */
- public int compare(Object a, Object b) { return ((String) a).equalsIgnoreCase(((String) b))?0:-1; }
- }
|
Message édité par benou le 17-06-2002 à 15:44:45
|