An die Downvoter: Ihr Verhalten ist herablassend. Diese Frage ist detailliert und spezifisch, klar und einfach geschrieben und für mindestens einen anderen Programmierer irgendwo von Interesse. Die Leute wissen möglicherweise nicht, wo sie suchen müssen, um den Javadoc oder den Quellcode zu finden. Unsere Aufgabe ist es, ihnen zu helfen und sie nicht dafür zu verprügeln, dass sie unwissend sind.
glmxndr
14
@subtenante, du bist richtig. Ich habe sogar Leute dafür verteidigt, dass sie Google-Fragen gestellt haben. Etwas so Einfaches wie dieses sollte jedoch selbst getestet werden, und IMO sollte es NIEMALS rechtfertigen, eine Frage auf einer Q & A-Site zu veröffentlichen. Der Titel ist irreführend und das Q ist Zeitverschwendung für alle, die es lesen.
Chris
9
@ Chris: oneat gab mir die Gelegenheit, mir den Quellcode anzusehen. Ich habe viel über trim () gelernt. Ich hätte es sonst nicht getan. Jeder ist für seinen eigenen Zeitaufwand verantwortlich. oneat ist nicht dafür verantwortlich zu machen, dass wir nicht in der Lage sind, von seiner scheinbar naiven Frage zu profitieren.
glmxndr
1
@skaffman: (c) sollte "try it and see" sein und erst dann (d) auf SO fragen.
Mac
2
Diese Frage scheint nicht zum Thema zu gehören, da es sich um etwas handelt, das jeder in weniger als einer Minute im Handbuch finden UND testen sollte.
Rückgabe : Eine Kopie dieser Zeichenfolge mit entferntem und nachfolgendem Leerzeichen oder diese Zeichenfolge, wenn kein führender oder nachfolgender Leerraum vorhanden ist.
~ Zitiert aus Java 1.5.0-Dokumenten
(Aber warum hast du es nicht einfach versucht und es selbst gesehen?)
Ich musste abstimmen, da diese Antwort nicht abdeckt, was die Dokumentation unter "Leerzeichen" versteht. Es scheint logisch, dass es dort Chararacter.isWhitespaceist, wo es wahr ist, aber das ist nicht das, was es mit "Leerzeichen" meint.
user2864740
7
@ user2864740: Diese Antwort ist nicht beabsichtigt , eine umfassende Analyse zu sein trim, isWhiteSpaceusw., oder eine Diskussion über Unklarheiten in der Java - Dokumentation; Dies ist eine einfache Antwort auf die oben gestellte Frage. Entfernt die trimMethode ein einzelnes oder mehrere Leerzeichen?
LukeH
Ich weiß, dass es nicht so ist. Ich habe abgelehnt, weil es selbst im Vorbeigehen nicht darauf hinweist. In jedem Fall kann ich meine Abstimmung nur rückgängig machen, wenn sie aktualisiert wurde (jedoch nur minimal).
user2864740
33
Aus dem Quellcode (dekompiliert):
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);}
Die beiden whileZeichen, die Sie sehen können, bedeuten, dass alle Zeichen, deren Unicode am Anfang und am Ende unter dem Leerzeichen liegt, entfernt werden.
Fragen Sie einen neuen Programmierer, der gerade gelernt hat, wie man ein System.out.println macht, um einen
Komponententest
26
Eine Sache, die jedoch hervorgehoben werden muss, ist, dass String.trim eine eigenartige Definition von "Leerzeichen" hat. Es werden keine Unicode-Leerzeichen entfernt, aber auch ASCII-Steuerzeichen, die Sie möglicherweise nicht als Leerzeichen betrachten.
Diese Methode kann verwendet werden, um Leerzeichen vom Anfang und Ende eines Strings abzuschneiden. Tatsächlich werden auch alle ASCII-Steuerzeichen abgeschnitten.
Wenn möglich, möchten Sie möglicherweise StringUtils.strip () von Commons Lang verwenden, das auch Unicode-Leerzeichen verarbeitet (und auch null-sicher ist).
Scheint ein schreckliches Versehen seitens der Designer zu sein. Und die schrecklich übertechnische Arbeitsweise der Dokumentation hilft nicht viel.
user2864740
2
Bravo! Sie haben die einfachste Frage gestellt, die jemals bei StackOverflow gestellt wurde, und etwas Intelligentes gefunden, das Sie dazu sagen können. Du bist ein Verdienst des Rennens.
Mark McKenna
3
@MarkMcKenna: Ich stelle immer wieder fest, dass diese angeblich supereinfachen Programmierfragen (Trimmen von Zeichenfolgen, Finden von Dateinamenerweiterungen usw.) immer ihre versteckten Komplexitäten haben. Das ist ein bisschen desillusionierend in Bezug auf unser Handwerk und unsere Werkzeuge.
Gibt eine Kopie der Zeichenfolge zurück, wobei führende und nachfolgende Leerzeichen weggelassen werden.
Leerzeichen auf beiden Seiten werden entfernt:
Beachten Sie, dass trim()die String-Instanz nicht geändert wird und ein neues Objekt zurückgegeben wird:
String original =" content ";String withoutWhitespace = original.trim();// original still refers to " content "// and withoutWhitespace refers to "content"
Eigentlich kann nichts die String-Instanz ändern (außer einigen schmutzigen Dingen, die die VM zum Absturz bringen könnten)
AvrDragon
13
Auf der Grundlage der Java - Dokumentation hier , die .trim()ersetzt ‚\ u0020‘ , die gemeinhin als Leerzeichen bekannt ist.
Beachten Sie jedoch, dass das '\ u00A0' ( Unicode NO-BREAK SPACE ) auch als Leerzeichen angesehen wird und .trim()dieses NICHT entfernt. Dies ist besonders häufig in HTML.
Um es zu entfernen, benutze ich:
tmpTrimStr = tmpTrimStr.replaceAll("\\u00A0","");
Ein Beispiel für dieses Problem wurde hier diskutiert .
Basierend auf dem Javadoc werden führende und nachfolgende Leerzeichen entfernt, die Leerzeichen, Tabulatoren, Zeilenumbrüche für Zeilenumbrüche, Formularvorschub usw. enthalten und Zeichen ausschließen , die nicht führend oder nachfolgend sind.
Marquis von Lorne
Danke, es hilft mir zuzuteilen
Asad Haider
8
Beispiel für das trim()Entfernen von Leerzeichen durch 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);}}
/**
* 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;}
Beachten Sie, dass nach dem Start und der Länge die Teilstring-Methode der String-Klasse aufgerufen wird.
Wobei "Leerzeichen" "Zeichen mit Werten kleiner oder gleich \ x20" ist .. brillant.
user2864740
3
trim()entfernt alle führenden und nachfolgenden Leerzeichen. Beachten Sie jedoch, dass Ihre Zeichenfolge nicht geändert wird. trim()gibt stattdessen eine neue Zeichenfolgeninstanz zurück.
Es werden alle führenden und nachfolgenden Leerzeichen entfernt.
Marquis von Lorne
3
Wenn Ihre String-Eingabe lautet:
String a =" abc ";System.out.println(a);
Ja, die Ausgabe lautet "abc". Aber wenn Ihre String-Eingabe ist:
String b =" This is a test "System.out.println(b);
Die Ausgabe wird This is a test
so sein. Trimmen entfernt also nur Leerzeichen vor Ihrem ersten Zeichen und nach Ihrem letzten Zeichen in der Zeichenfolge und ignoriert die inneren Leerzeichen. Dies ist ein Teil meines Codes, der die integrierte StringTrimmmethode zum Optimieren der inneren Leerzeichen und zum Entfernen von Leerzeichen vor und nach Ihrem ersten und letzten Zeichen in der Zeichenfolge leicht optimiert . Ich hoffe es hilft.
Die ersten paar Aussagen in dieser Antwort sind einfach falsch, die Ausgabe wird nicht "abc" sein. Vielleicht vergessen Sie .trim()in der System.out.println(a);?
Arjan
2
Es werden alle Leerzeichen auf beiden Seiten entfernt.
Eine sehr wichtige Sache ist, dass eine Zeichenfolge, die vollständig aus "Leerzeichen" besteht, eine leere Zeichenfolge zurückgibt.
Wenn a string sSomething = "xxxxx", wo xfür Leerzeichen stehen, sSomething.trim()wird eine leere Zeichenfolge zurückgegeben.
Wenn a string sSomething = "xxAxx", wo xfür Leerzeichen stehen, sSomething.trim()wird zurückkehren A.
Wenn sSomething ="xxSomethingxxxxAndSomethingxElsexxx", sSomething.trim()wird zurückgegeben SomethingxxxxAndSomethingxElse, beachten Sie, dass die Anzahl der xWörter nicht geändert wird.
Wenn Sie überprüfen möchten, was eine Methode bewirkt , können Sie BeanShell verwenden . Es ist eine Skriptsprache, die so nah wie möglich an Java ist. Im Allgemeinen wird Java mit einigen Entspannungen interpretiert. Eine weitere Option dieser Art ist die Groovy- Sprache. Beide Skriptsprachen bieten eine praktische Read-Eval-Print-Schleife, die aus interpretierten Sprachen bekannt ist. Sie können also die Konsole ausführen und einfach Folgendes eingeben:
" content ".trim();
Sie sehen dies "content"als Ergebnis nach dem Drücken Enter(oder Ctrl+Rin der Groovy-Konsole).
Antworten:
Alle von ihnen .
(Aber warum hast du es nicht einfach versucht und es selbst gesehen?)
quelle
Chararacter.isWhitespace
ist, wo es wahr ist, aber das ist nicht das, was es mit "Leerzeichen" meint.trim
,isWhiteSpace
usw., oder eine Diskussion über Unklarheiten in der Java - Dokumentation; Dies ist eine einfache Antwort auf die oben gestellte Frage. Entfernt dietrim
Methode ein einzelnes oder mehrere Leerzeichen?Aus dem Quellcode (dekompiliert):
Die beiden
while
Zeichen, die Sie sehen können, bedeuten, dass alle Zeichen, deren Unicode am Anfang und am Ende unter dem Leerzeichen liegt, entfernt werden.quelle
Schreiben Sie im Zweifelsfall einen Komponententest:
NB : Natürlich schlägt der Test (für JUnit + Hamcrest) nicht fehl
quelle
Eine Sache, die jedoch hervorgehoben werden muss, ist, dass String.trim eine eigenartige Definition von "Leerzeichen" hat. Es werden keine Unicode-Leerzeichen entfernt, aber auch ASCII-Steuerzeichen, die Sie möglicherweise nicht als Leerzeichen betrachten.
Wenn möglich, möchten Sie möglicherweise StringUtils.strip () von Commons Lang verwenden, das auch Unicode-Leerzeichen verarbeitet (und auch null-sicher ist).
quelle
Siehe API für die String-Klasse:
Leerzeichen auf beiden Seiten werden entfernt:
Beachten Sie, dass
trim()
die String-Instanz nicht geändert wird und ein neues Objekt zurückgegeben wird:quelle
Auf der Grundlage der Java - Dokumentation hier , die
.trim()
ersetzt ‚\ u0020‘ , die gemeinhin als Leerzeichen bekannt ist.Beachten Sie jedoch, dass das '\ u00A0' ( Unicode NO-BREAK SPACE
) auch als Leerzeichen angesehen wird und.trim()
dieses NICHT entfernt. Dies ist besonders häufig in HTML.Um es zu entfernen, benutze ich:
Ein Beispiel für dieses Problem wurde hier diskutiert .
quelle
Beispiel für das
trim()
Entfernen von Leerzeichen durch Java :AUSGABE
quelle
Aus Java-Dokumenten (String-Klassenquelle),
Beachten Sie, dass nach dem Start und der Länge die Teilstring-Methode der String-Klasse aufgerufen wird.
quelle
trim()
entfernt alle führenden und nachfolgenden Leerzeichen. Beachten Sie jedoch, dass Ihre Zeichenfolge nicht geändert wird.trim()
gibt stattdessen eine neue Zeichenfolgeninstanz zurück.quelle
Wenn Ihre String-Eingabe lautet:
Ja, die Ausgabe lautet "abc". Aber wenn Ihre String-Eingabe ist:
Die Ausgabe wird
This is a test
so sein. Trimmen entfernt also nur Leerzeichen vor Ihrem ersten Zeichen und nach Ihrem letzten Zeichen in der Zeichenfolge und ignoriert die inneren Leerzeichen. Dies ist ein Teil meines Codes, der die integrierteString
Trimmmethode zum Optimieren der inneren Leerzeichen und zum Entfernen von Leerzeichen vor und nach Ihrem ersten und letzten Zeichen in der Zeichenfolge leicht optimiert . Ich hoffe es hilft.quelle
.trim()
in derSystem.out.println(a);
?Es werden alle Leerzeichen auf beiden Seiten entfernt.
quelle
Eine sehr wichtige Sache ist, dass eine Zeichenfolge, die vollständig aus "Leerzeichen" besteht, eine leere Zeichenfolge zurückgibt.
Wenn a
string sSomething = "xxxxx"
, wox
für Leerzeichen stehen,sSomething.trim()
wird eine leere Zeichenfolge zurückgegeben.Wenn a
string sSomething = "xxAxx"
, wox
für Leerzeichen stehen,sSomething.trim()
wird zurückkehrenA
.Wenn
sSomething ="xxSomethingxxxxAndSomethingxElsexxx"
,sSomething.trim()
wird zurückgegebenSomethingxxxxAndSomethingxElse
, beachten Sie, dass die Anzahl derx
Wörter nicht geändert wird.Wenn Sie eine ordentlich verpackte Zeichenfolge
trim()
mit Regex kombinieren möchten, wie in diesem Beitrag gezeigt: Wie entferne ich doppelte Leerzeichen in der Zeichenfolge mit Java? .Ordnung ist für das Ergebnis bedeutungslos,
trim()
wäre aber zunächst effizienter. Ich hoffe es hilft.quelle
Um nur eine Instanz für den String zu behalten, können Sie Folgendes verwenden.
oder
Dann ist der Wert des
str
Stringsstr = "Hello"
quelle
Trim () funktioniert für beide Seiten.
quelle
Javadoc for String enthält alle Details. Entfernt Leerzeichen (Leerzeichen, Tabulatoren usw.) von beiden Enden und gibt eine neue Zeichenfolge zurück.
quelle
Wenn Sie überprüfen möchten, was eine Methode bewirkt , können Sie BeanShell verwenden . Es ist eine Skriptsprache, die so nah wie möglich an Java ist. Im Allgemeinen wird Java mit einigen Entspannungen interpretiert. Eine weitere Option dieser Art ist die Groovy- Sprache. Beide Skriptsprachen bieten eine praktische Read-Eval-Print-Schleife, die aus interpretierten Sprachen bekannt ist. Sie können also die Konsole ausführen und einfach Folgendes eingeben:
Sie sehen dies
"content"
als Ergebnis nach dem DrückenEnter
(oderCtrl+R
in der Groovy-Konsole).quelle
quelle
trim()
tut schon, was derrepkaceAll()
tun würde, wenn noch etwas zu tun wäre.