0-9 ve nokta olmayan tüm harfleri ve karakterleri kaldırmaya çalışıyorum. Ben kullanıyorum Character.isDigit()ama ondalık da kaldırır, ondalık nasıl tutabilirim?
0-9 ve nokta olmayan tüm harfleri ve karakterleri kaldırmaya çalışıyorum. Ben kullanıyorum Character.isDigit()ama ondalık da kaldırır, ondalık nasıl tutabilirim?
Yanıtlar:
Bu kodu deneyin:
String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");
Şimdi striçerecek "12.334.78".
[^\\d.-]
"1233478", bu yanlıştır.
Normal ifade kullanırdım.
String text = "-jaskdh2367sd.27askjdfh23";
String digits = text.replaceAll("[^0-9.]", "");
System.out.println(digits);
baskılar
2367.2723
-Negatif sayılar için de tutmak isteyebilirsiniz .
^ve ne anlama .geldiğini açıklayabilir misiniz?
[^bu karakterlerin değil araçlarının ve bir iç []a .sadece bir.
.sadece bir olduğu ave hiçbir şey ifade etmediği için ondan kurtulabilir miyim?
.sonucunuzda hiç istemiyorsanız .
String phoneNumberstr = "Tel: 00971-557890-999";
String numberRefined = phoneNumberstr.replaceAll("[^\\d-]", "");
sonuç: 0097-557890-999
Dize'de de "-" ye ihtiyacınız yoksa bunu yapabilirsiniz:
String phoneNumberstr = "Tel: 00971-55 7890 999";
String numberRefined = phoneNumberstr.replaceAll("[^0-9]", "");
sonuç: 0097557890999
Guava ile:
String input = "abx123.5";
String result = CharMatcher.inRange('0', '9').or(CharMatcher.is('.')).retainFrom(input);
bkz. http://code.google.com/p/guava-libraries/wiki/StringsAçıklama
str = str.replaceAll("\\D+","");
printf()yinelendiğini göstermek gibidir. Ayrıca yorumda bir cevap görürseniz moddan cevabı dönüştürmesini isteyebilir veya kendi başına bir cevap bile ekleyebilirsiniz - yorumlardaki cevaplar StackOverlow'da önerilmez.
Regex kullanmadan basit bir yol:
Nokta için ekstra bir karakter kontrolü eklemek '.'gereksinimi çözecektir:
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();
}
Bir java 8 akışı ile değiştirmenin bir yolu:
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.
}
Para birimi ondalık ayırıcısı Yerel Ayardan diğerine farklı olabilir. Her .zaman ayırıcı olarak düşünmek tehlikeli olabilir . yani
╔════════════════╦═══════════════════╗
║ Currency ║ Sample ║
╠════════════════╬═══════════════════╣
║ USA ║ $1,222,333.44 USD ║
║ United Kingdom ║ £1.222.333,44 GBP ║
║ European ║ €1.333.333,44 EUR ║
╚════════════════╩═══════════════════╝
Bence doğru yol:
DecimalFormatSymbolsVarsayılan Yerel Ayar veya belirtilen .Ve işte nasıl çözüyorum:
import java.text.DecimalFormatSymbols;
import java.util.Locale;
kod:
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;
}
Umarım bu yardımcı olabilir '.
Kotlin için buraya gelen Android kullanıcıları için
val dirtyString = "💰 Account Balance: $-12,345.67"
val cleanString = dirtyString.replace("[^\\d.]".toRegex(), "")
Çıktı:
cleanString = "12345.67"
Bu daha sonra güvenli bir şekilde dönüştürülmüş olabilir toDouble(), toFloat()ya da toInt()eğer gerekli
Bu, boş girdileri, negatif sayıları ve ondalık sayıları işler (projenize Apache Commons Lang kitaplığı, sürüm 3.8 veya daha üstünü dahil etmeniz gerekir):
import org.apache.commons.lang3.RegExUtils;
result = RegExUtils.removeAll(input, "-?[^\\d.]");
Kütüphane referansı: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RegExUtils.html