En Java, j'ai une chaîne comme celle-ci:
" content ".
Est-ce que String.trim()
supprimer tous les espaces sur ces côtés ou juste un espace sur chacun?
En Java, j'ai une chaîne comme celle-ci:
" content ".
Est-ce que String.trim()
supprimer tous les espaces sur ces côtés ou juste un espace sur chacun?
Réponses:
Tous .
Renvoie : Une copie de cette chaîne avec les espaces blancs de début et de fin supprimés, ou cette chaîne s'il n'y a pas d'espace blanc de début ou de fin.
~ Cité de la documentation Java 1.5.0
(Mais pourquoi n'avez-vous pas simplement essayé et vu par vous-même?)
Chararacter.isWhitespace
est vrai, mais ce n'est pas ce que cela signifie par "espace blanc" ..
trim
, isWhiteSpace
etc., ou une discussion des ambiguïtés dans la documentation Java; c'est une réponse simple à la question spécifique posée ci-dessus - c'est-à-dire, la trim
méthode supprime-t-elle un seul espace ou plusieurs espaces?
À 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 en dessous du caractère espace, au début et à la fin, sont supprimés.
En cas de doute, rédigez un test unitaire:
@Test
public void trimRemoveAllBlanks(){
assertThat(" content ".trim(), is("content"));
}
NB : bien entendu le test (pour JUnit + Hamcrest) n'échoue pas
Une chose à souligner, cependant, est que String.trim a une définition particulière de "espace blanc". Il ne supprime pas les espaces Unicode, mais supprime également les caractères de contrôle ASCII que vous ne pouvez pas considérer comme des espaces.
Cette méthode peut être utilisée pour couper les espaces du début et de la fin d'une chaîne; en fait, il supprime également tous les caractères de contrôle ASCII.
Si possible, vous voudrez peut-être utiliser StringUtils.strip () de Commons Lang, qui gère également les espaces Unicode (et est également sûr pour les valeurs nulles).
Voir API pour la classe String:
Renvoie une copie de la chaîne, en omettant les espaces de début et de fin.
Les espaces blancs des deux côtés sont supprimés:
Notez que trim()
ne modifie pas l'instance String, elle renverra un nouvel objet:
String original = " content ";
String withoutWhitespace = original.trim();
// original still refers to " content "
// and withoutWhitespace refers to "content"
Basé sur la documentation Java ici , le .trim()
remplace '\ u0020' qui est communément appelé espace blanc.
Mais notez que le '\ u00A0' ( Unicode NO-BREAK SPACE
) est également considéré comme un espace blanc et .trim()
ne le supprimera PAS. Ceci est particulièrement courant en HTML.
Pour le supprimer, j'utilise:
tmpTrimStr = tmpTrimStr.replaceAll("\\u00A0", "");
Un exemple de ce problème a été discuté ici .
Exemple de trim()
suppression d'espaces Java :
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);
}
}
PRODUCTION
old =
This is a String.
new = This is a String.
À partir de la documentation java (source de la classe String),
/**
* 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>'\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>'\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>'\u0020'</code>, and let
* <i>m</i> be the index of the last character in the string whose code
* is greater than <code>'\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>, <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 le début et la longueur, il appelle la méthode substring de la classe String.
trim()
supprimera tous les blancs de début et de fin. Mais attention: votre chaîne n'est pas modifiée. trim()
renverra une nouvelle instance de chaîne à la place.
Si votre entrée String est:
String a = " abc ";
System.out.println(a);
Oui, la sortie sera, "abc"; Mais si votre entrée String est:
String b = " This is a test "
System.out.println(b);
La sortie sera This is a test
donc Trim supprime uniquement les espaces avant votre premier caractère et après votre dernier caractère dans la chaîne et ignore les espaces intérieurs. Ceci est un morceau de mon code qui optimise légèrement la String
méthode de découpage intégrée en supprimant les espaces intérieurs et en supprimant les espaces avant et après votre premier et dernier caractère de la chaîne. J'espère que ça 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);
}
.trim()
dans le System.out.println(a);
?
Une chose très importante est qu'une chaîne composée entièrement d '"espaces blancs" renverra une chaîne vide.
si a string sSomething = "xxxxx"
, où x
représentent les espaces blancs, sSomething.trim()
renverra une chaîne vide.
si a string sSomething = "xxAxx"
, où x
représentent les espaces blancs, sSomething.trim()
retournera A
.
si sSomething ="xxSomethingxxxxAndSomethingxElsexxx"
, sSomething.trim()
retournera SomethingxxxxAndSomethingxElse
, notez que le nombre de x
mots entre les mots n'est pas modifié.
Si vous voulez une chaîne en paquets soignée, combinez-la trim()
avec regex comme indiqué dans cet article: Comment supprimer les espaces blancs en double dans la chaîne en utilisant Java? .
L'ordre n'a pas de sens pour le résultat mais d' trim()
abord serait plus efficace. J'espère que ça aide.
Javadoc for String 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 que fera une méthode, vous pouvez utiliser BeanShell . C'est un langage de script conçu pour être le plus proche possible de Java. D'une manière générale, il est interprété en Java avec quelques relaxations. Une autre option de ce type est le langage Groovy . Ces deux langages de script fournissent une connaissance pratique des boucles Read-Eval-Print à partir des langages interprétés. Vous pouvez donc exécuter la console et taper simplement:
" content ".trim();
Vous verrez "content"
comme résultat après avoir appuyé sur Enter
(ou Ctrl+R
dans la console Groovy).
String formattedStr=unformattedStr;
formattedStr=formattedStr.trim().replaceAll("\\s+", " ");
trim()
fait déjà ce repkaceAll()
qu'il ferait, s'il lui restait quelque chose à faire.