Combien d’espaces Java Ssortingng.sortingm () supprimera-t-il?

En Java, j’ai une chaîne comme ceci:

" content ". 

Ssortingng.sortingm() supprimera-t-il tous les espaces de ces côtés ou un seul espace sur chacun?

    Tous

    Retourne : Une copie de cette chaîne avec les espaces blancs de début et de fin, ou cette chaîne si elle ne contient aucun espace blanc de début ou de fin.

    ~ Cité à partir de Java 1.5.0 docs

    (Mais pourquoi ne pas l’avoir essayé et voir par vous-même?)

    A partir du code source (décompilé):

      public Ssortingng sortingm() { int i = this.count; int j = 0; int k = this.offset; char[] arrayOfChar = this.value; while ((j < i) && (arrayOfChar[(k + j)] <= ' ')) ++j; while ((j < i) && (arrayOfChar[(k + i - 1)] <= ' ')) --i; return (((j > 0) || (i < this.count)) ? substring(j, i) : this); } 

    Les deux while que vous pouvez voir signifient que tous les caractères dont l'unicode est inférieur au caractère d'espace, au début et à la fin, sont supprimés.

    En cas de doute, écrivez un test unitaire:

     @Test public void sortingmRemoveAllBlanks(){ assertThat(" content ".sortingm(), is("content")); } 

    NB : bien sûr le test (pour JUnit + Hamcrest) n’échoue pas

    Une chose à souligner, cependant, est que Ssortingng.sortingm a une définition particulière de “espace blanc”. Il ne supprime pas les espaces blancs Unicode, mais supprime également les caractères de contrôle ASCII que vous ne pouvez pas prendre en compte.

    Cette méthode peut être utilisée pour couper les espaces à partir du début et de la fin d’une chaîne. en fait, il coupe également tous les caractères de contrôle ASCII.

    Si possible, vous pouvez utiliser SsortingngUtils.ssortingp () de Commons Lang, qui gère également les espaces blancs Unicode (et est également null-safe).

    Voir la classe API pour Ssortingng:

    Renvoie une copie de la chaîne, les espaces blancs de début et de fin étant omis.

    Les espaces des deux côtés sont supprimés:

    Notez que sortingm() ne modifie pas l’instance Ssortingng, il renverra un nouvel object:

      Ssortingng original = " content "; Ssortingng withoutWhitespace = original.sortingm(); // original still refers to " content " // and withoutWhitespace refers to "content" 

    Basé sur les documents Java ici , le .sortingm() remplace ‘\ u0020’ qui est communément appelé espace blanc.

    Mais notez bien que le \ u00A0 ( Unicode NO-BREAK SPACE   ) est également vu comme un espace et .sortingm() ne le supprimera PAS. Ceci est particulièrement courant en HTML.

    Pour l’enlever, j’utilise:

     tmpTrimStr = tmpTrimStr.replaceAll("\\u00A0", ""); 

    Un exemple de ce problème a été discuté ici .

    Exemple de suppression d’espaces Java sortingm() :

     public class Test { public static void main(Ssortingng[] args) { Ssortingng str = "\n\t This is be sortingmmed.\n\n"; Ssortingng newStr = str.sortingm(); //removes newlines, tabs and spaces. System.out.println("old = " + str); System.out.println("new = " + newStr); } } 

    SORTIE

     old = This is a Ssortingng. new = This is a Ssortingng. 

    À partir de documents Java (source de classe Ssortingng),

     /** * Returns a copy of the ssortingng, with leading and trailing whitespace * omitted. * 

    * If this Ssortingng object represents an empty character * sequence, or the first and last characters of character sequence * represented by this Ssortingng object both have codes * greater than '\u0020' (the space character), then a * reference to this Ssortingng object is returned. *

    * Otherwise, if there is no character with a code greater than * '\u0020' in the ssortingng, then a new * Ssortingng object representing an empty ssortingng is created * and returned. *

    * Otherwise, let k be the index of the first character in the * ssortingng whose code is greater than '\u0020', and let * m be the index of the last character in the ssortingng whose code * is greater than '\u0020'. A new Ssortingng * object is created, representing the subssortingng of this ssortingng that * begins with the character at index k and ends with the * character at index m-that is, the result of * this.subssortingng(km+1). *

    * This method may be used to sortingm whitespace (as defined above) from * the beginning and end of a ssortingng. * * @return A copy of this ssortingng with leading and trailing white * space removed, or this ssortingng if it has no leading or * trailing white space. */ public Ssortingng sortingm() { int len = count; int st = 0; int off = offset; /* avoid getfield opcode */ char[] val = value; /* avoid getfield opcode */ while ((st < len) && (val[off + st] <= ' ')) { st++; } while ((st < len) && (val[off + len - 1] <= ' ')) { len--; } return ((st > 0) || (len < count)) ? substring(st, len) : this; }

    Notez qu'après avoir reçu le début et la longueur, il appelle la méthode de sous-chaîne de la classe Ssortingng.

    sortingm() supprime tous les espaces de début et de fin. Mais sachez que votre chaîne n’est pas modifiée. sortingm() renverra une nouvelle instance de chaîne à la place.

    Si votre entrée de chaîne est:

     Ssortingng a = " abc "; System.out.println(a); 

    Oui, la sortie sera “abc”; Mais si votre entrée de chaîne est:

     Ssortingng b = " This is a test " System.out.println(b); 

    La sortie sera This is a test Donc, sortingm supprime uniquement les espaces avant votre premier caractère et après votre dernier caractère dans la chaîne et ignore les espaces internes. Il s’agit d’une partie de mon code qui optimise légèrement la méthode de suppression Ssortingng intégrée en supprimant les espaces internes et en supprimant les espaces avant et après votre premier et dernier caractère dans la chaîne. J’espère que cela aide.

     public static Ssortingng sortingm(char [] input){ char [] output = new char [input.length]; int j=0; int jj=0; if(input[0] == ' ' ) { while(input[jj] == ' ') jj++; } for(int i=jj; i 

    Il supprimera tous les espaces des deux côtés.

    Une chose très importante est qu’une chaîne entièrement constituée d’espaces blancs renverra une chaîne vide.

    si une ssortingng sSomething = "xxxxx" , où x représente des espaces, sSomething.sortingm() renverra une chaîne vide.

    Si une ssortingng sSomething = "xxAxx" , où x représente des espaces, sSomething.sortingm() renverra A

    Si sSomething ="xxSomethingxxxxAndSomethingxElsexxx" , sSomething.sortingm() renverra SomethingxxxxAndSomethingxElse , notez que le nombre de x entre les mots n’est pas modifié.

    Si vous voulez une chaîne de paquets empaquetée, combinez sortingm() avec regex comme indiqué dans cet article: Comment supprimer des espaces blancs en double dans une chaîne en utilisant Java? .

    L’ordre n’a pas de sens pour le résultat, mais sortingm() premier serait plus efficace. J’espère que cela aide.

    Pour ne conserver qu’une seule instance pour la chaîne, vous pouvez utiliser les éléments suivants.

     str = " Hello "; 

    ou

     str = str.sortingm(); 

    Ensuite, la valeur de la chaîne str sera str = "Hello"

    Trim () fonctionne pour les deux côtés.

    Javadoc pour Ssortingng a tous les détails. Supprime les espaces blancs (espace, tabulations, etc.) des deux extrémités et renvoie une nouvelle chaîne.

    Si vous voulez vérifier ce qui va faire une méthode, vous pouvez utiliser BeanShell . C’est un langage de script conçu pour être aussi proche de Java que possible. D’une manière générale, il est interprété Java avec quelques relaxations. Une autre option de ce genre est le langage Groovy . Ces deux langages de script offrent une lecture en boucle Read-Eval-Print très pratique à partir des langages interprétés. Donc, vous pouvez exécuter la console et tapez simplement:

     " content ".sortingm(); 

    Vous verrez "content" comme résultat après avoir appuyé sur Enter (ou Ctrl+R dans la console Groovy).

     Ssortingng formattedStr=unformattedStr; formattedStr=formattedStr.sortingm().replaceAll("\\s+", " ");