Essayer de supprimer toutes les lettres et les caractères qui ne sont pas 0-9 et un point. J'utilise Character.isDigit()mais il supprime également les décimales, comment puis-je également conserver les décimales?
Essayer de supprimer toutes les lettres et les caractères qui ne sont pas 0-9 et un point. J'utilise Character.isDigit()mais il supprime également les décimales, comment puis-je également conserver les décimales?
Réponses:
Essayez ce code:
String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");
Maintenant , strcontiendra "12.334.78".
[^\\d.-]
"1233478", ce qui est incorrect.
J'utiliserais une expression régulière.
String text = "-jaskdh2367sd.27askjdfh23";
String digits = text.replaceAll("[^0-9.]", "");
System.out.println(digits);
impressions
2367.2723
Vous voudrez peut-être -aussi garder pour les nombres négatifs.
^et .signifie cette déclaration?
[^signifie pas ces personnages et à l'intérieur d'un []a .est juste un.
.est juste un aet ne veut rien dire, puis-je simplement m'en débarrasser?
.de résultat dans votre résultat.
String phoneNumberstr = "Tel: 00971-557890-999";
String numberRefined = phoneNumberstr.replaceAll("[^\\d-]", "");
résultat: 0097-557890-999
si vous n'avez pas non plus besoin de "-" dans String, vous pouvez faire ceci:
String phoneNumberstr = "Tel: 00971-55 7890 999";
String numberRefined = phoneNumberstr.replaceAll("[^0-9]", "");
résultat: 0097557890999
Avec goyave:
String input = "abx123.5";
String result = CharMatcher.inRange('0', '9').or(CharMatcher.is('.')).retainFrom(input);
voir http://code.google.com/p/guava-libraries/wiki/StringsExplained
str = str.replaceAll("\\D+","");
printf()sont des doublons. De plus, si vous voyez une réponse dans un commentaire, vous pouvez demander au mod de la convertir en réponse ou même d'ajouter une réponse par vous-même - les réponses dans les commentaires sont déconseillées sur StackOverlow.
Un moyen simple sans utiliser Regex:
L'ajout d'une vérification de caractère supplémentaire pour le point '.'résoudra l'exigence:
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();
}
Une façon de le remplacer par un flux java 8:
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.
}
Le séparateur décimal de devise peut être différent d'un paramètre régional à un autre. Il pourrait être dangereux de .toujours considérer comme séparateur. c'est à dire
╔════════════════╦═══════════════════╗
║ Currency ║ Sample ║
╠════════════════╬═══════════════════╣
║ USA ║ $1,222,333.44 USD ║
║ United Kingdom ║ £1.222.333,44 GBP ║
║ European ║ €1.333.333,44 EUR ║
╚════════════════╩═══════════════════╝
Je pense que la bonne façon est:
DecimalFormatSymbolsparamètres régionaux par défaut ou spécifiés.Et voici comment je le résous:
import java.text.DecimalFormatSymbols;
import java.util.Locale;
code:
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;
}
J'espère que cela peut aider ».
Pour les gens d'Android qui viennent ici pour Kotlin
val dirtyString = "💰 Account Balance: $-12,345.67"
val cleanString = dirtyString.replace("[^\\d.]".toRegex(), "")
Production:
cleanString = "12345.67"
Cela pourrait ensuite être converti en toute sécurité toDouble(), toFloat()ou toInt()si nécessaire
Cela gère les entrées nulles, les nombres négatifs et les décimales (vous devez inclure la bibliothèque Apache Commons Lang, version 3.8 ou supérieure, dans votre projet):
import org.apache.commons.lang3.RegExUtils;
result = RegExUtils.removeAll(input, "-?[^\\d.]");
Référence de la bibliothèque: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RegExUtils.html