Di Java, saya memiliki String seperti ini:
" content ".
Akankah String.trim()
menghapus semua spasi di sisi ini atau hanya satu spasi di masing-masing?
Di Java, saya memiliki String seperti ini:
" content ".
Akankah String.trim()
menghapus semua spasi di sisi ini atau hanya satu spasi di masing-masing?
Jawaban:
Semuanya .
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?)
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, apakah trim
metode ini menghapus satu spasi atau beberapa spasi?
Dari kode sumber (didekompilasi):
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);
}
Dua while
yang dapat Anda lihat berarti semua karakter yang unicode-nya berada di bawah karakter spasi, di awal dan akhir, telah dihapus.
Jika ragu, tulis tes unit:
@Test
public void trimRemoveAllBlanks(){
assertThat(" content ".trim(), is("content"));
}
NB : tentu saja pengujian (untuk JUnit + Hamcrest) tidak gagal
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).
Lihat API untuk kelas String:
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 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:
tmpTrimStr = tmpTrimStr.replaceAll("\\u00A0", "");
Contoh masalah ini dibahas di sini .
Contoh Java trim()
menghapus spasi:
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);
}
}
KELUARAN
old =
This is a String.
new = This is a String.
Dari dokumen java (sumber kelas 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;
}
Perhatikan bahwa setelah memulai dan memanjang itu memanggil metode substring dari kelas String.
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.
Jika input String Anda adalah:
String a = " abc ";
System.out.println(a);
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 String
metode trim bawaan menghapus spasi dalam dan menghapus spasi sebelum dan sesudah karakter pertama dan terakhir Anda dalam string. Semoga membantu.
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()
di System.out.println(a);
?
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 x
berarti spasi putih, sSomething.trim()
akan mengembalikan string kosong.
jika a string sSomething = "xxAxx"
, di mana x
berarti ruang putih, sSomething.trim()
akan kembali A
.
jika sSomething ="xxSomethingxxxxAndSomethingxElsexxx"
, sSomething.trim()
akan kembali SomethingxxxxAndSomethingxElse
, perhatikan bahwa jumlah x
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.
Untuk menyimpan hanya satu contoh untuk String, Anda dapat menggunakan yang berikut ini.
str = " Hello ";
atau
str = str.trim();
Maka nilai str
String, akan menjadistr = "Hello"
Javadoc untuk String memiliki semua detailnya. Menghapus spasi (spasi, tab, dll) dari kedua ujung dan mengembalikan string baru.
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+R
di konsol Groovy).
String formattedStr=unformattedStr;
formattedStr=formattedStr.trim().replaceAll("\\s+", " ");
trim()
sudah melakukan apa yang repkaceAll()
akan dilakukan, jika masih ada yang tersisa untuk dilakukan.