Untuk para downvoters: perilaku Anda merendahkan. Pertanyaan ini terperinci dan spesifik, ditulis dengan jelas dan sederhana, yang menarik setidaknya satu programmer lain di suatu tempat. Orang mungkin tidak tahu ke mana harus mencari javadoc atau kode sumber. Tugas kita adalah membantu mereka, bukan menyalahkan mereka karena tidak peduli.
glmxndr
14
@ subtenante, Anda benar. Saya bahkan pernah membela orang-orang karena mengajukan pertanyaan tentang Google. Namun, sesuatu yang sederhana seperti ini harus diuji sendiri, dan IMO, TIDAK PERNAH menjamin untuk memposting pertanyaan di situs Tanya Jawab. Judulnya menyesatkan dan Q hanya membuang-buang waktu bagi semua yang membacanya.
Chris
9
@ Chris: oneat memberi saya kesempatan untuk melihat kode sumber. Saya belajar banyak tentang trim (). Saya tidak akan memiliki sebaliknya. Setiap orang bertanggung jawab untuk menghabiskan waktunya sendiri. oneat tidak bisa disalahkan karena kita tidak bisa mendapatkan keuntungan dari pertanyaannya yang tampaknya naif.
glmxndr
1
@skaffman: (c) harus "coba dan lihat", dan hanya kemudian (d) bertanya di SO.
Mac
2
Pertanyaan ini tampaknya di luar topik karena ini tentang sesuatu yang seharusnya dapat ditemukan oleh siapa pun di manual DAN tes dalam waktu kurang dari satu menit.
Mengembalikan : Salinan string ini dengan spasi kosong di depan dan di belakangnya dihilangkan, atau string ini jika tidak ada spasi putih di depan atau di belakangnya.
~ Dikutip dari Java 1.5.0 docs
(Tapi kenapa kamu tidak mencobanya dan melihat sendiri?)
Saya harus menolak karena jawaban ini tidak mencakup apa yang dimaksud dengan dokumentasi dengan "spasi". Tampaknya logis bahwa ini akan menjadi tempat Chararacter.isWhitespaceyang benar, tetapi bukan itu yang dimaksud dengan "spasi" ..
pengguna2864740
7
@ user2864740: Jawaban ini tidak dimaksudkan sebagai analisis yang komprehensif trim, isWhiteSpacedll, atau diskusi tentang ambiguitas dalam dokumen Java; ini adalah jawaban langsung untuk pertanyaan spesifik yang ditanyakan di atas - yaitu, apakah trimmetode ini menghapus satu spasi atau beberapa spasi?
LukeH
Saya tahu itu tidak benar. Saya memilih turun karena gagal menunjukkan hal itu, bahkan secara sepintas. Bagaimanapun, saya tidak dapat membatalkan pilihan saya kecuali telah diperbarui (betapapun minimalnya).
pengguna2864740
33
Dari kode sumber (didekompilasi):
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);}
Dua whileyang dapat Anda lihat berarti semua karakter yang unicode-nya berada di bawah karakter spasi, di awal dan akhir, telah dihapus.
Tanyakan kepada programmer baru yang baru saja mempelajari cara melakukan System.out.println untuk melakukan pengujian unit untuk melihat apa hasilnya ...
jaxkodex
26
Satu hal yang perlu diperhatikan, adalah bahwa String.trim memiliki definisi khusus dari "spasi". Ini tidak menghapus spasi kosong Unicode, tetapi juga menghapus karakter kontrol ASCII yang mungkin tidak Anda anggap spasi kosong.
Metode ini dapat digunakan untuk memangkas spasi dari awal dan akhir string; bahkan, itu memangkas semua karakter kontrol ASCII juga.
Jika memungkinkan, Anda mungkin ingin menggunakan StringUtils.strip () Commons Lang, yang juga menangani whitespace Unicode (dan juga aman untuk null).
Sepertinya ada kekeliruan yang buruk di pihak desainer .. dan dokumentasi yang terlalu teknis tidak banyak membantu.
pengguna2864740
2
Bravo! Anda mengambil pertanyaan paling sederhana yang pernah ditanyakan di StackOverflow dan menemukan sesuatu yang cerdas untuk dikatakan tentangnya. Anda adalah penghargaan untuk balapan tersebut.
Mark McKenna
3
@MarkMcKenna: Saya terus menemukan bahwa pertanyaan pemrograman yang seharusnya sangat sederhana ini (memotong string, menemukan ekstensi nama file, dll.) Selalu memiliki kerumitan tersembunyi. Itu sedikit mengecewakan tentang kerajinan dan alat kami.
Mengembalikan salinan string, dengan spasi kosong di depan dan di belakangnya dihilangkan.
Ruang kosong di kedua sisi dihapus:
Perhatikan bahwa trim()tidak mengubah instance String, itu akan mengembalikan objek baru:
String original =" content ";String withoutWhitespace = original.trim();// original still refers to " content "// and withoutWhitespace refers to "content"
Berdasarkan Javadoc, ini menghapus spasi kosong di depan dan di belakang, yang mencakup spasi, tab, baris baru kembali, umpan formulir, ... dan yang mengecualikan karakter yang tidak berada di depan atau di belakang.
Marquis dari Lorne
Terima kasih, ini membantu saya membagikan
Asad Haider
8
Contoh Java trim()menghapus spasi:
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;}
Perhatikan bahwa setelah memulai dan memanjang itu memanggil metode substring dari kelas String.
Di mana "spasi" adalah "karakter dengan nilai kurang dari atau sama dengan \ x20" .. cemerlang.
pengguna2864740
3
trim()akan menghapus semua kosong di depan dan di belakang. Namun berhati-hatilah: string Anda tidak berubah. trim()akan mengembalikan contoh string baru sebagai gantinya.
Ya, keluarannya adalah, "abc"; Tetapi jika input String Anda adalah:
String b =" This is a test "System.out.println(b);
Output akan This is a test
Jadi trim hanya menghapus spasi sebelum karakter pertama Anda dan setelah karakter terakhir Anda dalam string dan mengabaikan spasi dalam. Ini adalah bagian dari kode saya yang sedikit mengoptimalkan Stringmetode trim bawaan menghapus spasi dalam dan menghapus spasi sebelum dan sesudah karakter pertama dan terakhir Anda dalam string. Semoga membantu.
Satu hal yang sangat penting adalah bahwa string yang seluruhnya terbuat dari "spasi putih" akan mengembalikan string kosong.
jika a string sSomething = "xxxxx", di mana xberarti spasi putih, sSomething.trim()akan mengembalikan string kosong.
jika a string sSomething = "xxAxx", di mana xberarti ruang putih, sSomething.trim()akan kembali A.
jika sSomething ="xxSomethingxxxxAndSomethingxElsexxx", sSomething.trim()akan kembali SomethingxxxxAndSomethingxElse, perhatikan bahwa jumlah xantara kata tidak diubah.
Jika Anda ingin memeriksa metode apa yang akan dilakukan, Anda dapat menggunakan BeanShell . Ini adalah bahasa scripting yang dirancang sedekat mungkin dengan Java. Secara umum itu diartikan Jawa dengan beberapa relaksasi. Pilihan lain dari jenis ini adalah bahasa Groovy . Kedua bahasa skrip ini menyediakan loop Baca-Evaluasi-Cetak yang mudah diketahui dari bahasa yang ditafsirkan. Jadi Anda dapat menjalankan konsol dan cukup mengetik:
" content ".trim();
Anda akan melihat "content"hasilnya setelah menekan Enter(atau Ctrl+Rdi konsol Groovy).
Jawaban:
Semuanya .
(Tapi kenapa kamu tidak mencobanya dan melihat sendiri?)
sumber
Chararacter.isWhitespace
yang benar, tetapi bukan itu yang dimaksud dengan "spasi" ..trim
,isWhiteSpace
dll, atau diskusi tentang ambiguitas dalam dokumen Java; ini adalah jawaban langsung untuk pertanyaan spesifik yang ditanyakan di atas - yaitu, apakahtrim
metode ini menghapus satu spasi atau beberapa spasi?Dari kode sumber (didekompilasi):
Dua
while
yang dapat Anda lihat berarti semua karakter yang unicode-nya berada di bawah karakter spasi, di awal dan akhir, telah dihapus.sumber
Jika ragu, tulis tes unit:
NB : tentu saja pengujian (untuk JUnit + Hamcrest) tidak gagal
sumber
Satu hal yang perlu diperhatikan, adalah bahwa String.trim memiliki definisi khusus dari "spasi". Ini tidak menghapus spasi kosong Unicode, tetapi juga menghapus karakter kontrol ASCII yang mungkin tidak Anda anggap spasi kosong.
Jika memungkinkan, Anda mungkin ingin menggunakan StringUtils.strip () Commons Lang, yang juga menangani whitespace Unicode (dan juga aman untuk null).
sumber
Lihat API untuk kelas String:
Ruang kosong di kedua sisi dihapus:
Perhatikan bahwa
trim()
tidak mengubah instance String, itu akan mengembalikan objek baru:sumber
Berdasarkan dokumen Java di sini ,
.trim()
penggantian '\ u0020' yang umumnya dikenal sebagai spasi.Tapi perhatikan, '\ u00A0' ( Unicode NO-BREAK SPACE
) juga terlihat sebagai spasi, dan.trim()
TIDAK akan menghapusnya. Ini sangat umum di HTML.Untuk menghapusnya, saya menggunakan:
Contoh masalah ini dibahas di sini .
sumber
Contoh Java
trim()
menghapus spasi:KELUARAN
sumber
Dari dokumen java (sumber kelas String),
Perhatikan bahwa setelah memulai dan memanjang itu memanggil metode substring dari kelas String.
sumber
trim()
akan menghapus semua kosong di depan dan di belakang. Namun berhati-hatilah: string Anda tidak berubah.trim()
akan mengembalikan contoh string baru sebagai gantinya.sumber
Jika input String Anda adalah:
Ya, keluarannya adalah, "abc"; Tetapi jika input String Anda adalah:
Output akan
This is a test
Jadi trim hanya menghapus spasi sebelum karakter pertama Anda dan setelah karakter terakhir Anda dalam string dan mengabaikan spasi dalam. Ini adalah bagian dari kode saya yang sedikit mengoptimalkanString
metode trim bawaan menghapus spasi dalam dan menghapus spasi sebelum dan sesudah karakter pertama dan terakhir Anda dalam string. Semoga membantu.sumber
.trim()
diSystem.out.println(a);
?Ini akan menghapus semua ruang di kedua sisi.
sumber
Satu hal yang sangat penting adalah bahwa string yang seluruhnya terbuat dari "spasi putih" akan mengembalikan string kosong.
jika a
string sSomething = "xxxxx"
, di manax
berarti spasi putih,sSomething.trim()
akan mengembalikan string kosong.jika a
string sSomething = "xxAxx"
, di manax
berarti ruang putih,sSomething.trim()
akan kembaliA
.jika
sSomething ="xxSomethingxxxxAndSomethingxElsexxx"
,sSomething.trim()
akan kembaliSomethingxxxxAndSomethingxElse
, perhatikan bahwa jumlahx
antara kata tidak diubah.Jika Anda ingin string yang dikemas rapi digabungkan
trim()
dengan regex seperti yang ditunjukkan di posting ini: Bagaimana cara menghapus duplikat spasi putih dalam string menggunakan Java? .Urutan tidak ada artinya untuk hasil tetapi
trim()
pertama akan lebih efisien. Semoga membantu.sumber
Untuk menyimpan hanya satu contoh untuk String, Anda dapat menggunakan yang berikut ini.
atau
Maka nilai
str
String, akan menjadistr = "Hello"
sumber
Trim () berfungsi untuk kedua sisi.
sumber
Javadoc untuk String memiliki semua detailnya. Menghapus spasi (spasi, tab, dll) dari kedua ujung dan mengembalikan string baru.
sumber
Jika Anda ingin memeriksa metode apa yang akan dilakukan, Anda dapat menggunakan BeanShell . Ini adalah bahasa scripting yang dirancang sedekat mungkin dengan Java. Secara umum itu diartikan Jawa dengan beberapa relaksasi. Pilihan lain dari jenis ini adalah bahasa Groovy . Kedua bahasa skrip ini menyediakan loop Baca-Evaluasi-Cetak yang mudah diketahui dari bahasa yang ditafsirkan. Jadi Anda dapat menjalankan konsol dan cukup mengetik:
Anda akan melihat
"content"
hasilnya setelah menekanEnter
(atauCtrl+R
di konsol Groovy).sumber
sumber
trim()
sudah melakukan apa yangrepkaceAll()
akan dilakukan, jika masih ada yang tersisa untuk dilakukan.