Вопрос по character, string, java – Java String удалить все нечисловые символы

193

Попытка удалить все буквы и символы, которые не являются 0-9 и точка. Я используюCharacter.isDigit() но он также удаляет десятичную дробь, как я могу сохранить десятичную?

[myStr = myStr.replaceAll (& quot; [^ \\ d] & quot ;, & quot; & quot;)] [1] [1]:stackoverflow.com/questions/1533659/… Bitmap
Это странный способ сказать это. Разве "t" не все буквы и символы, которые не являются 0-9 и точкой "? эквивалентно более простому "всем символам, которые не являются 0-9 и точкой"? Я имею в виду, что буквы - это символы, которые не являются ни 0-9, ни точкой. Adam Zalcman

Ваш Ответ

9   ответов
13
str = str.replaceAll("\\D+","");
он понижен, потому что он является репостом. Точно такой же ответ уже был подсвечен 5 лет назад !! см. выше:stackoverflow.com/a/10372905/704246
Благодаря Зариалу, Роберт действительно отредактировал мой ответ от str = str.replaceAll (& quot; \ D + & quot; & quot; & quot;); to str = str.replaceAll (& quot; \\ D + & quot; & quot; & quot; & quot;); ... Так что я допустил эту ошибку, вставив ее в окно редактора StackO. Так что спасибо Роберт за исправление. Теперь это работает!
@ СаадБенбузид, а? каково ваше определение точно такого же ответа?
Не знаю, почему люди отклонили ваше решение ... Очень помогло, спасибо! Голоса вверх!
@SaadBenbouzid 1) это комментарий, а не ответ 2) это совершенно другое регулярное выражение 3) не все ответы, использующие регулярное выражение D, похоже на указание на то, что все ответы на языке C, которые используютprintf() являются дубликатами. Также, если вы видите ответ в комментарии, вы можете попросить мод преобразовать его в ответ или даже добавить ответ самостоятельно - ответы в комментариях не рекомендуется использовать в StackOverlow.
2

может быть опасно для рассмотрения. как разделитель всегда. то есть

╔════════════════╦═══════════════════╗
║    Currency    ║      Sample       ║
╠════════════════╬═══════════════════╣
║ USA            ║ $1,222,333.44 USD ║
║ United Kingdom ║ £1.222.333,44 GBP ║
║ European       ║ €1.333.333,44 EUR ║
╚════════════════╩═══════════════════╝

Я думаю, что правильный путь:

Get decimal character via DecimalFormatSymbols by default Locale or specified one. Cook regex pattern with decimal character in order to obtain digits only

И вот как я это решаю:

import java.text.DecimalFormatSymbols;
import java.util.Locale;

код:

    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;
}

Я надеюсь, что это может помочь ».

5

Simple way without using Regex:

Добавление дополнительной проверки символов для точки'.' решит требование:

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();
}
91

String text = "-jaskdh2367sd.27askjdfh23";
String digits = text.replaceAll("[^0-9.]", "");
System.out.println(digits);

печать

2367.2723

Вы могли бы сохранить- а также для отрицательных чисел.

@AdamZalcman Спасибо. Я чинил. ;)
@MansourFahad в регулярном выражении[^ значит не эти символы, а внутри[] . это просто.
Так как. это простоa и ничего не значит, могу ли я просто избавиться от этого?
Вы не должны избегать точки в своем регулярном выражении.
Не могли бы вы дать объяснение тому, что делает^ а также. значит в этом утверждении?
3

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.
}
450

String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");

Сейчасstr будет содержать"12.334.78".

Это также может сработать: & gt; str = str.replaceAll (& quot; [\\ D.] & quot ;, & quot; & quot;);
это сработало для меня
@ дааааахххх..хамфхамф нет, это не сработает. Мы должны отрицать всю группу (включая цифры и точки), предлагаемый вами код отменяет только цифры, и результат не будет содержать точек, как требуется. Тыtest Это? используя приведенный выше пример кода, ваш код возвращается"1233478", что неверно.
@ & # xD3; scar L & # xF3; pez: как включить и отрицательные числа? Я имею в виду, я должен заменить все, что не является положительным / отрицательным числом, пустым пробелом. Как это сделать?
@PankajSinghal просто включите знак минус в регулярное выражение:[^\\d.-]
0

val dirtyString = " Account Balance: $-12,345.67"
val cleanString = dirtyString.replace("[^\\d.]".toRegex(), "")

Output:

cleanString = "12345.67"

This could then be safely converted toDouble(), toFloat() or toInt() if needed

18

String input = "abx123.5";
String result = CharMatcher.inRange('0', '9').or(CharMatcher.is('.')).retainFrom(input);

увидеть,http://code.google.com/p/guava-libraries/wiki/StringsExplained

Зачем в мире вам нужна Гуава для такой простой и важной задачи ?!
@egorikem, если ваш проект уже использует гуаву, вы можете использовать его без каких-либо дополнительных затрат.
34
String phoneNumberstr = "Tel: 00971-557890-999";
String numberRefined = phoneNumberstr.replaceAll("[^\\d-]", "");

если вам также не нужно & quot; - & quot; в строке вы можете сделать так:

String phoneNumberstr = "Tel: 00971-55 7890 999";      
String numberRefined = phoneNumberstr.replaceAll("[^0-9]", "");

результат: 0097557890999

Похожие вопросы