Aux votes négatifs: votre comportement est condescendant. Cette question est détaillée et spécifique, écrite clairement et simplement, intéressant au moins un autre programmeur quelque part. Les gens peuvent ne pas savoir où chercher pour trouver le javadoc ou le code source. Notre travail est de les aider, pas de les dénigrer pour leur ignorance.
glmxndr
14
@subtenante, vous avez raison. J'ai même déjà défendu des gens pour avoir posé des questions google. Cependant, quelque chose d'aussi simple que cela devrait être testé par lui-même, et l'OMI ne devrait JAMAIS justifier la publication d'une question sur un site de questions-réponses. Le titre est trompeur et le Q est une perte de temps pour tous ceux qui le lisent.
Chris
9
@Chris: oneat m'a donné l'occasion de regarder le code source. J'ai beaucoup appris sur trim (). Je ne l'aurais pas fait autrement. Chacun est responsable de ses propres dépenses de son temps. Il ne faut pas blâmer uneat pour notre incapacité à tirer profit de sa question apparemment naïve.
glmxndr
1
@skaffman: (c) devrait être "essayez-le et voyez", et alors seulement (d) demandez sur SO.
Mac
2
Cette question semble être hors sujet car il s'agit de quelque chose que tout le monde devrait pouvoir trouver dans le manuel ET tester en moins d'une minute.
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?)
J'ai dû voter à la baisse car cette réponse ne couvre pas ce que la documentation entend par "espace blanc". Il semblerait logique que ce soit là où Chararacter.isWhitespaceest vrai, mais ce n'est pas ce que cela signifie par "espace blanc" ..
user2864740
7
@ user2864740: Cette réponse n'est pas destinée à être une analyse complète de trim, isWhiteSpaceetc., 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 trimméthode supprime-t-elle un seul espace ou plusieurs espaces?
LukeH
Je sais que non. J'ai voté à la baisse parce qu'il ne le souligne pas, même en passant. Dans tous les cas, je ne peux pas annuler mon vote à moins qu'il ne soit mis à jour (même de manière minimale).
user2864740
33
À partir du code source (décompilé):
publicString 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 whileque 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.
Demandez à un nouveau programmeur qui vient d'apprendre à faire un System.out.println de faire un test unitaire pour voir quel est le résultat ...
jaxkodex
26
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).
Cela ressemble à un terrible oubli de la part des concepteurs ... et le travail terriblement trop technique de la documentation n'aide pas beaucoup.
user2864740
2
Bravo! Vous avez répondu à la question la plus simple jamais posée sur StackOverflow et avez trouvé quelque chose d'intelligent à dire à ce sujet. Vous faites honneur à la course.
Mark McKenna
3
@MarkMcKenna: Je n'arrête pas de constater que ces questions de programmation soi-disant super simples (couper les chaînes, trouver des extensions de nom de fichier, etc.) ont toujours leurs complexités cachées. C'est un peu décevant sur notre métier et nos outils.
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"
en fait, rien ne peut changer l'instance String (à l'exception de certaines choses sales qui pourraient faire planter la machine virtuelle)
AvrDragon
13
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.
Basé sur le Javadoc, il supprime les espaces blancs de début et de fin, qui incluent l'espace, la tabulation, le retour chariot de retour à la ligne, le saut de page, ... et qui exclut les caractères qui ne sont ni de début ni de fin.
Marquis de Lorne
Merci, ça m'aide à allouer
Asad Haider
8
Exemple de trim()suppression d'espaces Java :
publicclassTest{publicstaticvoid 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);}}
À 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.
*/publicString 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.
Où "espace blanc" est "caractères avec des valeurs inférieures ou égales à \ x20" .. brillant.
user2864740
3
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.
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 Stringmé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.
Les premières déclarations de cette réponse sont totalement fausses, la sortie ne sera pas "abc". Peut-être avez-vous oublié .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ù xreprésentent les espaces blancs, sSomething.trim()renverra une chaîne vide.
si a string sSomething = "xxAxx", où xreprésentent les espaces blancs, sSomething.trim()retournera A.
si sSomething ="xxSomethingxxxxAndSomethingxElsexxx", sSomething.trim()retournera SomethingxxxxAndSomethingxElse, notez que le nombre de xmots entre les mots n'est pas modifié.
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+Rdans la console Groovy).
@Mark mais accidentellement c'est ce que je cherchais quand j'ai ouvert cette question ...
Armfoot
C'est également inutile. trim()fait déjà ce repkaceAll()qu'il ferait, s'il lui restait quelque chose à faire.
Marquis of Lorne
@EJP the replaceAll remplacerait également les espaces dans la chaîne par un seul espace, tandis que trim ne gérerait que les espaces de début et de fin
Réponses:
Tous .
(Mais pourquoi n'avez-vous pas simplement essayé et vu par vous-même?)
la source
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, latrim
méthode supprime-t-elle un seul espace ou plusieurs espaces?À partir du code source (décompilé):
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.la source
En cas de doute, rédigez un test unitaire:
NB : bien entendu le test (pour JUnit + Hamcrest) n'échoue pas
la source
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.
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).
la source
Voir API pour la classe String:
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:la source
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:
Un exemple de ce problème a été discuté ici .
la source
Exemple de
trim()
suppression d'espaces Java :PRODUCTION
la source
À partir de la documentation java (source de la classe String),
Notez qu'après avoir obtenu le début et la longueur, il appelle la méthode substring de la classe String.
la source
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.la source
Si votre entrée String est:
Oui, la sortie sera, "abc"; Mais si votre entrée String est:
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 laString
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.la source
.trim()
dans leSystem.out.println(a);
?Cela supprimera tous les espaces des deux côtés.
la source
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()
retourneraA
.si
sSomething ="xxSomethingxxxxAndSomethingxElsexxx"
,sSomething.trim()
retourneraSomethingxxxxAndSomethingxElse
, notez que le nombre dex
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.la source
Pour ne conserver qu'une seule instance de la chaîne, vous pouvez utiliser ce qui suit.
ou
Ensuite, la valeur de la
str
chaîne serastr = "Hello"
la source
Trim () fonctionne pour les deux côtés.
la source
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.
la source
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:
Vous verrez
"content"
comme résultat après avoir appuyé surEnter
(ouCtrl+R
dans la console Groovy).la source
la source
trim()
fait déjà cerepkaceAll()
qu'il ferait, s'il lui restait quelque chose à faire.