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?
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?
Jawaban:
Coba kode ini:
String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");
Sekarang strakan berisi "12.334.78".
[^\\d.-]
"1233478", yang tidak benar.
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.
^dan .artinya dalam pernyataan ini?
[^berarti bukan karakter ini dan di dalam huruf []a .hanyalah.
.hanya adan tidak berarti apa-apa, bisakah saya menyingkirkannya?
.dalam hasil Anda.
String phoneNumberstr = "Tel: 00971-557890-999";
String numberRefined = phoneNumberstr.replaceAll("[^\\d-]", "");
hasil: 0097-557890-999
jika Anda juga tidak perlu "-" di String, Anda dapat melakukannya seperti ini:
String phoneNumberstr = "Tel: 00971-55 7890 999";
String numberRefined = phoneNumberstr.replaceAll("[^0-9]", "");
hasil: 0097557890999
Dengan jambu biji:
String input = "abx123.5";
String result = CharMatcher.inRange('0', '9').or(CharMatcher.is('.')).retainFrom(input);
lihat http://code.google.com/p/guava-libraries/wiki/StringsExplained
str = str.replaceAll("\\D+","");
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:
public static String getOnlyNumerics(String str) {
if (str == null) {
return null;
}
StringBuffer strBuff = new StringBuffer();
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();
}
Cara untuk menggantinya dengan java 8 stream:
public static void main(String[] args) throws IOException
{
String test = "ab19198zxncvl1308j10923.";
StringBuilder result = new StringBuilder();
test.chars().mapToObj( i-> (char)i ).filter( c -> Character.isDigit(c) || c == '.' ).forEach( c -> result.append(c) );
System.out.println( result ); //returns 19198.130810923.
}
Pemisah desimal mata uang dapat berbeda dari Lokal ke yang lain. Itu bisa berbahaya untuk dipertimbangkan .sebagai pemisah selalu. yaitu
╔════════════════╦═══════════════════╗
║ Currency ║ Sample ║
╠════════════════╬═══════════════════╣
║ USA ║ $1,222,333.44 USD ║
║ United Kingdom ║ £1.222.333,44 GBP ║
║ European ║ €1.333.333,44 EUR ║
╚════════════════╩═══════════════════╝
Saya pikir cara yang tepat adalah:
DecimalFormatSymbolssecara default Lokal atau yang ditentukan.Dan di sini bagaimana saya menyelesaikannya:
import java.text.DecimalFormatSymbols;
import java.util.Locale;
kode:
public static String getDigit(String quote, Locale locale) {
char decimalSeparator;
if (locale == null) {
decimalSeparator = new DecimalFormatSymbols().getDecimalSeparator();
} else {
decimalSeparator = new DecimalFormatSymbols(locale).getDecimalSeparator();
}
String regex = "[^0-9" + decimalSeparator + "]";
String valueOnlyDigit = quote.replaceAll(regex, "");
try {
return valueOnlyDigit;
} catch (ArithmeticException | NumberFormatException e) {
Log.e(TAG, "Error in getMoneyAsDecimal", e);
return null;
}
return null;
}
Saya harap itu bisa membantu, '.
Untuk orang-orang Android yang datang ke sini untuk Kotlin
val dirtyString = "💰 Account Balance: $-12,345.67"
val cleanString = dirtyString.replace("[^\\d.]".toRegex(), "")
Keluaran:
cleanString = "12345.67"
Ini kemudian dapat dikonversi dengan aman toDouble(), toFloat()atau toInt()jika perlu
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.]");
Referensi perpustakaan: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RegExUtils.html