Mencari cara cepat dan sederhana di Jawa untuk mengubah string ini
" hello there "
untuk sesuatu yang terlihat seperti ini
"hello there"
di mana saya mengganti semua banyak ruang dengan satu ruang, kecuali saya juga ingin satu atau lebih spasi di awal string hilang.
Sesuatu seperti ini membuat saya sebagian di sana
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
tapi tidak cukup.
Jawaban:
Coba ini:
Lihat juga
String.trim()
Tidak ada
trim()
regexIni juga mungkin dilakukan hanya dengan satu
replaceAll
, tetapi ini jauh lebih mudah dibaca daripadatrim()
solusinya. Meskipun demikian, ini disediakan di sini hanya untuk menunjukkan apa yang dapat dilakukan regex:Ada 3 alternatif:
^_+
: setiap urutan spasi di awal string$1
, yang menangkap string kosong_+$
: setiap urutan spasi di akhir string$1
, yang menangkap string kosong(_)+
: urutan ruang apa pun yang tidak cocok dengan yang di atas, artinya ada di tengah$1
, yang menangkap satu ruangLihat juga
sumber
trim()
dan kemudianreplaceAll()
menggunakan lebih sedikit memori daripada melakukannya sebaliknya. Tidak banyak, tetapi jika ini dipanggil berkali-kali, itu mungkin bertambah, terutama jika ada banyak "ruang kosong dipangkas". (Trim()
tidak benar-benar menghilangkan ruang ekstra - itu hanya menyembunyikannya dengan memindahkan nilai awal dan akhir. Yang mendasarinyachar[]
tetap tidak berubah.)( ) +
atau( ){2,}
harus (sangat) sedikit lebih efisien;)\\s
akan mengganti grup spasi putih dengan karakter yang diinginkan..trim().replaceAll(" +", " ")
(dengan dua spasi) lebih cepat dari.trim().replaceAll(" +", " ")
(dengan satu spasi). Saya menjalankan tes timing pada string yang hanya memiliki ruang tunggal dan semua ruang ganda, dan itu datang jauh lebih cepat untuk keduanya ketika melakukan banyak operasi (jutaan atau lebih, tergantung pada lingkungan).Anda hanya perlu:
di mana Anda mencocokkan satu atau lebih ruang dan menggantinya dengan satu ruang dan kemudian memangkas spasi putih di awal dan akhir (Anda sebenarnya bisa membalikkan dengan memangkas pertama dan kemudian mencocokkan untuk membuat regex lebih cepat seperti yang ditunjukkan seseorang).
Untuk mengujinya dengan cepat, cobalah:
dan itu akan kembali:
sumber
Gunakan metode Apache commons
StringUtils.normalizeSpace(String str)
. Lihat dokumen di sinisumber
Ini bekerja dengan baik untuk saya:
sValue = sValue.trim().replaceAll("\\s+", " ");
sumber
Ini akan cocok dengan lebih dari satu ruang.
KELUARAN:
sumber
Untuk menghilangkan spasi di awal dan di akhir String, gunakan
String#trim()
metode. Dan kemudian gunakanmytext.replaceAll("( )+", " ")
.sumber
Pertama-tama Anda dapat menggunakan
String.trim()
, dan kemudian menerapkan perintah ganti regex pada hasilnya.sumber
Kode berikut akan memadatkan spasi putih di antara kata-kata dan menghapusnya di awal dan akhir string
Ini akan menampilkan
a string with many spaces, a tab and a newline
Perhatikan bahwa karakter yang tidak dapat dicetak termasuk spasi, tab, dan baris baru akan dipadatkan atau dihapus
Untuk informasi lebih lanjut, lihat dokumentasi masing-masing:
sumber
Coba yang ini.
Kode sampel
KELUARAN
Pertama itu akan mengganti semua ruang dengan ruang tunggal. Daripada kita harus melakukan trim
String
karena Mulai dariString
dan UjungString
itu akan menggantikan semua ruang dengan ruang tunggal jikaString
memiliki ruang di Mulai dariString
dan AkhirString
Jadi kita perlu memotong mereka. Daripada Anda mendapatkan yang Anda inginkanString
.sumber
Anda juga bisa menggunakan lookarounds.
ATAU
<space>(?= )
cocok dengan karakter spasi yang diikuti oleh karakter spasi lain. Jadi dalam ruang yang berurutan, itu akan cocok dengan semua ruang kecuali yang terakhir karena tidak diikuti oleh karakter spasi. Ini memberi Anda ruang tunggal untuk ruang berurutan setelah operasi penghapusan.Contoh:
sumber
memangkas()
Menghapus hanya ruang terkemuka & belakang.
Dari Java Doc, "Mengembalikan string yang nilainya string ini, dengan spasi spasi apa pun yang memimpin dan tertinggal dihapus."
"D ev Dum my"
ganti (), replaceAll ()
Mengganti semua string kosong dalam kata,
Keluaran:
Catatan: "\ s +" adalah ekspresi reguler yang mirip dengan karakter spasi kosong.
Referensi: https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html
sumber
Banyak jawaban yang benar telah diberikan sejauh ini dan saya melihat banyak upvotes. Namun, cara yang disebutkan akan berhasil tetapi tidak benar-benar dioptimalkan atau tidak benar-benar terbaca. Baru-baru ini saya menemukan solusi yang disukai setiap pengembang.
Kamu selesai. Ini solusi yang bisa dibaca.
sumber
Di Kotlin akan terlihat seperti ini
sumber
kurangi spasi terlebih dahulu
huruf besar huruf pertama dan huruf kecil semuanya
sumber
sumber
Ini berhasil untuk saya
di mana filter mengikuti fungsi dan memindai adalah string input:
sumber
Anda harus melakukannya seperti ini
Letakkan + di dalam kurung bulat.
sumber
sumber
Lihat
String.replaceAll
.Gunakan regex
"\s"
dan gantikan dengan" "
.Lalu gunakan
String.trim
.sumber
new String(" hello there ").trim().replaceAll("\\s+", " ")
Periksa ini...
Jika String hanya berisi satu spasi maka ganti () tidak akan ganti,
Jika spasi lebih dari satu, Kemudian ganti () tindakan melakukan dan menghilangkan ruang.
Untuk menghitung jumlah spasi dalam sebuah String.
Pattern .quote ("?") Mengembalikan String pola literal.
sumber
Metode saya sebelum saya menemukan jawaban kedua menggunakan regex sebagai solusi yang lebih baik. Mungkin seseorang membutuhkan kode ini.
sumber
\s
dengan ekspresi reguler (spasi, tab, baris baru, umpan form).Versi stream, filter spasi dan tab.
sumber
sumber
Metode paling sederhana untuk menghilangkan ruang putih di string.
sumber
Solusi di atas adalah algoritma dengan kompleksitas O (n) tanpa menggunakan fungsi java.
sumber
Silakan gunakan kode di bawah ini
sumber
Halo, maaf atas keterlambatannya! Inilah jawaban terbaik dan paling efisien yang Anda cari:
Jadi output Anda dari contoh ini adalah: Nama saya kingkon.
Namun metode ini juga akan menghapus "\ n" yang mungkin dimiliki string Anda. Jadi, jika Anda tidak ingin, gunakan saja metode sederhana ini:
Dan jika Anda ingin menghapus spasi terkemuka dan tambahan juga cukup tambahkan:
sumber
Saya tahu metode replaceAll jauh lebih mudah tetapi saya ingin memposting ini juga.
sumber
sumber