117 votes

Combien d'espaces Java String.trim () supprimera-t-il?

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

Sera `` Supprimer tous les espaces sur ces côtés ou juste un espace pour chacun ?

168voto

LukeH Points 110965

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?)

33voto

GhiOm Points 13732

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

   public String trim()
  {
    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.

27voto

dfa Points 54490

En cas de doute, écrivez un test unitaire:

 @Test
public void trimRemoveAllBlanks(){
    assertThat("    content   ".trim(), is("content"));
}
 

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

26voto

Thilo Points 108673

Une chose à remarquer, cependant, est que la Chaîne.garniture a une curieuse définition de "l'espace". Elle ne supprime pas les espaces Unicode, mais aussi supprime les caractères de contrôle ASCII que vous ne peut pas considérer l'espace.

Cette méthode peut être utilisée pour garnir les espaces de début et de fin de chaîne; en fait, elle coupe tous les caractères de contrôle ASCII.

Si possible, vous pouvez utiliser Commons Lang StringUtils.strip(), qui gère également les espaces Unicode (et est null-fort, trop).

15voto

Juha Syrjälä Points 11475

Voir la classe API pour String:

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 trim() ne modifie pas l'instance String, il renverra un nouvel objet:

  String original = "  content  ";
 String withoutWhitespace = original.trim();

 // original still refers to "  content  "
 // and withoutWhitespace refers to "content"
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X