Mencoba menghapus semua huruf dan karakter yang bukan 0-9 dan titik. Saya menggunakan Character.isDigit()tetapi juga menghilangkan desimal, bagaimana saya bisa juga menjaga desimal?
Ini cara yang aneh untuk mengatakan ini. Bukankah "semua huruf dan karakter yang bukan 0-9 dan periode" setara dengan lebih sederhana "semua karakter yang bukan 0-9 dan suatu periode"? Maksud saya, huruf adalah karakter yang bukan 0-9 atau titik.
Ini juga bisa berfungsi:> str = str.replaceAll ("[\\ D.]", "");
yeaaaahhhh..hamf hamf
1
@ Óscar López: bagaimana cara memasukkan angka negatif juga? Maksud saya, saya harus mengganti semua yang bukan angka positif / negatif dengan ruang kosong. Bagaimana cara melakukannya?
Pankaj Singhal
3
@PankajSinghal cukup menyertakan tanda minus di regex:[^\\d.-]
Óscar López
3
@ yeaaaahhhh..hamfhamf tidak, itu tidak akan berhasil. Kami harus menegasikan seluruh grup (termasuk angka dan titik), kode yang Anda sarankan hanya meniadakan angka, dan hasilnya tidak akan termasuk titik, seperti yang diperlukan. Apakah Anda mengujinya ? menggunakan kode contoh di atas, kode Anda kembali "1233478", yang tidak benar.
Óscar López
Bekerja dengan sangat baik bahkan di Android. Terima kasih.
juanram0n
98
Saya akan menggunakan regex.
String text ="-jaskdh2367sd.27askjdfh23";String digits = text.replaceAll("[^0-9.]","");System.out.println(digits);
cetakan
2367.2723
Anda mungkin ingin menyimpan -juga untuk angka negatif.
Entah mengapa orang menurunkan solusi Anda ... Membantu saya banyak, terima kasih! Pilih!
Zarial
Terima kasih Zarial, saya melihat Robert benar-benar mengedit jawaban saya dari str = str.replaceAll ("\ D +", ""); to str = str.replaceAll ("\\ D +", ""); ... Jadi saya membuat kesalahan ini ketika menempelkannya ke kotak editor StackO. Jadi terima kasih Robert sudah memperbaikinya. Sekarang berhasil!
Angoranator777
itu diturunkan karena itu repost. Jawaban yang persis sama telah diajukan 5 tahun yang lalu !! lihat di atas: stackoverflow.com/a/10372905/704246
Saad Benbouzid
@ SaadBenbouzid ya? apa definisi Anda dari jawaban yang sama persis?
Boris Treukhov
2
@ SaadBenbouzid 1) itu adalah komentar dan bukan jawaban 2) itu adalah regex yang sama sekali berbeda 3) tidak semua jawaban yang menggunakan regex D identik seperti menunjukkan bahwa semua jawaban bahasa C yang digunakan printf()adalah duplikat. Juga jika Anda melihat jawaban dalam komentar, Anda dapat meminta mod untuk mengubahnya menjadi jawaban atau bahkan menambahkan jawaban sendiri - jawaban dalam komentar tidak disarankan di StackOverlow.
Boris Treukhov
6
Cara sederhana tanpa menggunakan Regex:
Menambahkan tanda karakter tambahan untuk titik '.'akan menyelesaikan persyaratan:
publicstaticString getOnlyNumerics(String str){if(str ==null){returnnull;}StringBuffer strBuff =newStringBuffer();char c;for(int i =0; i < str.length(); i++){
c = str.charAt(i);if(Character.isDigit(c)|| c =='.'){
strBuff.append(c);}}return strBuff.toString();}
publicstaticvoid main(String[] args)throwsIOException{String test ="ab19198zxncvl1308j10923.";StringBuilder result =newStringBuilder();
test.chars().mapToObj( i->(char)i ).filter( c ->Character.isDigit(c)|| c =='.').forEach( c -> result.append(c));System.out.println( result );//returns 19198.130810923.}
Ini menangani input nol, angka negatif dan desimal (Anda harus menyertakan perpustakaan Apache Commons Lang, versi 3.8 atau lebih tinggi, dalam proyek Anda):
import org.apache.commons.lang3.RegExUtils;
result =RegExUtils.removeAll(input,"-?[^\\d.]");
Jawaban:
Coba kode ini:
Sekarang
str
akan berisi"12.334.78"
.sumber
[^\\d.-]
"1233478"
, yang tidak benar.Saya akan menggunakan regex.
cetakan
Anda mungkin ingin menyimpan
-
juga untuk angka negatif.sumber
^
dan.
artinya dalam pernyataan ini?[^
berarti bukan karakter ini dan di dalam huruf[]
a.
hanyalah.
.
hanyaa
dan tidak berarti apa-apa, bisakah saya menyingkirkannya?.
dalam hasil Anda.hasil: 0097-557890-999
jika Anda juga tidak perlu "-" di String, Anda dapat melakukannya seperti ini:
hasil: 0097557890999
sumber
Dengan jambu biji:
lihat http://code.google.com/p/guava-libraries/wiki/StringsExplained
sumber
sumber
printf()
adalah duplikat. Juga jika Anda melihat jawaban dalam komentar, Anda dapat meminta mod untuk mengubahnya menjadi jawaban atau bahkan menambahkan jawaban sendiri - jawaban dalam komentar tidak disarankan di StackOverlow.Cara sederhana tanpa menggunakan Regex:
Menambahkan tanda karakter tambahan untuk titik
'.'
akan menyelesaikan persyaratan:sumber
Cara untuk menggantinya dengan java 8 stream:
sumber
Pemisah desimal mata uang dapat berbeda dari Lokal ke yang lain. Itu bisa berbahaya untuk dipertimbangkan
.
sebagai pemisah selalu. yaituSaya pikir cara yang tepat adalah:
DecimalFormatSymbols
secara default Lokal atau yang ditentukan.Dan di sini bagaimana saya menyelesaikannya:
import java.text.DecimalFormatSymbols;
import java.util.Locale;
kode:
Saya harap itu bisa membantu, '.
sumber
Untuk orang-orang Android yang datang ke sini untuk Kotlin
Keluaran:
Ini kemudian dapat dikonversi dengan aman
toDouble()
,toFloat()
atautoInt()
jika perlusumber
Ini menangani input nol, angka negatif dan desimal (Anda harus menyertakan perpustakaan Apache Commons Lang, versi 3.8 atau lebih tinggi, dalam proyek Anda):
Referensi perpustakaan: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RegExUtils.html
sumber