Combien D'espaces seront Java String.trim() supprimer?

en Java, j'ai une chaîne comme celle-ci:

"     content     ".

Sera String.trim() supprimer tous les espaces sur ces côtés ou d'un seul espace sur chaque?

119
demandé sur Jasper 2010-02-04 13:25:51

17 réponses

tous .

Renvoie : Une copie de cette chaîne avec l'espace blanc menant et traînant enlevé, ou cette chaîne si elle n'a pas d'espace blanc menant ou traînant.

~ Cité de Java 1.5.0 docs

(Mais pourquoi n'avez-vous pas juste essayer et voir par vous-même?)

169
répondu LukeH 2013-09-23 04:32:37

du code source (décomposé):

  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 tous les caractères dont l'unicode est sous le caractère d'espace, au début et à la fin, sont supprimés.

33
répondu glmxndr 2010-02-04 10:54:32

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) ne échoue pas

27
répondu dfa 2013-07-19 14:25:44

une chose à souligner, cependant, est cette corde.trim a une définition particulière de"l'espace blanc". Il ne supprime pas Unicode whitespace, mais supprime également ASCII caractères de contrôle que vous ne pouvez pas considérer whitespace.

cette méthode peut être utilisée pour couper les espaces depuis le début et la fin d'une chaîne; en fait, elle ajuste aussi tous les caractères de contrôle ASCII.

Si possible, vous pouvez utiliser Commons Les StringUtils de Lang.strip(), qui gère aussi Unicode whitespace (et est null-safe, too).

26
répondu Thilo 2010-02-04 10:49:08

voir API pour la classe de chaîne:

renvoie une copie de la chaîne de caractères, avec les espaces de début et de fin omis.

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

notez que trim() ne change pas l'instance de la chaîne, il retournera un nouvel objet:

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

 // original still refers to "  content  "
 // and withoutWhitespace refers to "content"
15
répondu Juha Syrjälä 2010-02-04 10:31:55

exemple de Java trim() suppression d'espaces:

public class Test
{
    public static void main(String[] args)
    {
        String str = "\n\t This is be trimmed.\n\n";

        String newStr = str.trim();     //removes newlines, tabs and spaces.

        System.out.println("old = " + str);
        System.out.println("new = " + newStr);
    }
}

sortie

old = 
 This is a String.


new = This is a String.
8
répondu Unmesha SreeVeni 2013-07-19 14:29:33

De java docs(classe String source),

/**
 * Returns a copy of the string, with leading and trailing whitespace
 * omitted.
 * <p>
 * If this <code>String</code> object represents an empty character
 * sequence, or the first and last characters of character sequence
 * represented by this <code>String</code> object both have codes
 * greater than <code>'&#92;u0020'</code> (the space character), then a
 * reference to this <code>String</code> object is returned.
 * <p>
 * Otherwise, if there is no character with a code greater than
 * <code>'&#92;u0020'</code> in the string, then a new
 * <code>String</code> object representing an empty string is created
 * and returned.
 * <p>
 * Otherwise, let <i>k</i> be the index of the first character in the
 * string whose code is greater than <code>'&#92;u0020'</code>, and let
 * <i>m</i> be the index of the last character in the string whose code
 * is greater than <code>'&#92;u0020'</code>. A new <code>String</code>
 * object is created, representing the substring of this string that
 * begins with the character at index <i>k</i> and ends with the
 * character at index <i>m</i>-that is, the result of
 * <code>this.substring(<i>k</i>,&nbsp;<i>m</i>+1)</code>.
 * <p>
 * This method may be used to trim whitespace (as defined above) from
 * the beginning and end of a string.
 *
 * @return  A copy of this string with leading and trailing white
 *          space removed, or this string if it has no leading or
 *          trailing white space.
 */
public String trim() {
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 obtenu start et length, il appelle la méthode substring de la classe String.

4
répondu Prateek 2012-12-18 10:50:20

trim() permet d'enlever toutes les ébauches d'attaque et de fuite. Mais attention: Votre chaîne n'est pas modifiée. trim() renverra une nouvelle instance de chaîne à la place.

3
répondu tangens 2010-02-04 10:27:39

si votre entrée de chaîne est:

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

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

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

sortie sera This is a test Afin de réduire seulement supprime les espaces avant votre premier personnage et après votre dernier caractère de la chaîne et ignore les espaces intérieurs. Il s'agit d'un morceau de mon code qui optimise légèrement la méthode de finition String intégré dans enlever les espaces intérieurs et supprime les espaces avant et après votre premier et dernier caractère de la chaîne. Espérons que cela aide.

public static String trim(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<input.length; i++){
      if(input[i] !=' ' || ( i==(input.length-1) && input[input.length-1] == ' ')){
        output[j]=input[i];
        j++;
      }
      else if (input[i+1]!=' '){
        output[j]=' ';
        j++;
      }      
    }
    char [] m = new char [j];
    int a=0;
    for(int i=0; i<m.length; i++){
      m[i]=output[a];
      a++;
    }
    return new String (m);
  }
3
répondu Farah Nazifa 2015-10-10 05:26:52

Il va supprimer tous les espaces sur les deux côtés.

2
répondu Ravia 2010-02-04 10:27:16

une chose très importante est qu'une corde faite entièrement d'espaces blancs retournera une corde vide.

si un string sSomething = "xxxxx" , où x signifie des espaces blancs, sSomething.trim() retournera une chaîne vide.

si un string sSomething = "xxAxx" , où x signifie espaces blancs, sSomething.trim() retournera A .

si sSomething ="xxSomethingxxxxAndSomethingxElsexxx" , sSomething.trim() retournera SomethingxxxxAndSomethingxElse , notez que le nombre de x entre les mots n'est pas modifié.

si vous voulez une chaîne de caractères emballée net combiner trim() avec regex comme montré dans ce post: Comment supprimer les espaces blancs en double dans la chaîne de caractères en utilisant Java? .

L'ordre est dénué de sens pour le résultat, mais trim() d'abord serait plus efficace. Espérons que cela aide.

2
répondu rciafardone 2017-05-23 12:10:44

pour ne conserver qu'une seule instance pour la chaîne, vous pouvez utiliser ce qui suit.

str = "  Hello   ";

ou

str = str.trim();

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

2
répondu Angelos P 2013-08-25 22:43:39

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

0
répondu ZeissS 2010-02-04 10:27:49

Javadoc la Chaîne de tous les détails. Supprime l'espace blanc (espace, onglets, etc. ) de la fin et renvoie une nouvelle chaîne.

0
répondu fastcodejava 2010-02-04 10:32:16

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. En général, il est interprété Java avec quelques relaxations. Une autre option de ce genre est Groovy langue. Ces deux langages de script offrent une boucle de lecture-évaluation-impression pratique connue des langages interprétés. Vous pouvez donc utiliser la console et taper:

"     content     ".trim();

vous verrez "content" après avoir appuyé sur Enter (ou Ctrl+R dans Groovy console).

0
répondu Rorick 2010-02-04 10:44:36
String formattedStr=unformattedStr;
formattedStr=formattedStr.trim().replaceAll("\s+", " ");
0
répondu MIke 2012-12-18 10:44:20