Combien D'espaces seront Java String.trim() supprimer?
17 réponses
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.
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
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).
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"
basé sur les docs Java ici , le .trim()
remplace '\u0020' qui est communément appelé espace blanc.
mais notez que le" \u00A0 "( Unicode NO-BREAK SPACE" 151960920
) est également considéré comme un espace blanc, et .trim()
ne supprimera pas cela. Ceci est particulièrement fréquent en HTML.
pour l'enlever, j'utilise:
tmpTrimStr = tmpTrimStr.replaceAll("\u00A0", "");
un exemple de ce problème était discuté ici .
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.
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>'\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 start et length, il appelle la méthode substring de la classe String.
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.
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);
}
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.
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"
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.
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).
String formattedStr=unformattedStr;
formattedStr=formattedStr.trim().replaceAll("\s+", " ");