2012-04-29 3 views
149

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

+3

[myStr = myStr.replaceAll ("\ [^ \\ д \]", "")] [1] [1]: http://stackoverflow.com/questions/1533659/ how-do-i-remove-the-non-numeric-character-from-a-string-in-java – Bitmap

+2

Это странный способ сказать это. Разве не «все буквы и символы, которые не равны 0-9, а период« эквивалентен более простым »всем символам, которые не являются 0-9 и периодом»? Я имею в виду, буквы - это символы, которые не являются 0-9 или периодом. –

ответ

370

Попробуйте этот код:

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

str Теперь будет содержать "12.334.78".

+8

Это также может работать: > str = str.replaceAll ("[\\ D.]", ""); –

+0

@ Óscar López: как включить отрицательные числа? Я имею в виду, я должен заменить все, что не является положительным/отрицательным числом с пустым пространством. Как это сделать? –

+0

@PankajSinghal просто включает знак минуса в регулярном выражении: '[^ \\ d .-]' –

68

Я использовал бы регулярное выражение.

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

печатает

2367.2723 

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

+0

Вам не следует избегать точки в вашем регулярном выражении. –

+0

@AdamZalcman спасибо. Я исправлял. ;) –

+0

Не могли бы вы пояснить, что означает '^' и '.' в этом утверждении? –

19
String phoneNumberstr = "Tel: 00971-557890-999"; 
String numberRefined = phoneNumberstr.replaceAll("[^\\d-]", ""); 

результат: 0097-557890-999

, если вы не нужны "-" в строку, которую вы можете сделать, как это :

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

результат: 0097557890999

+0

Спасибо за отличный answe! R –

5

Простой способ без использования 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(); 
} 
0

способ заменить его с потоком 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. 
} 
7
str = str.replaceAll("\\D+",""); 
+0

Не знаю почему люди отказали вашему решению ... Помогли мне много, спасибо! Голоса up! – Zarial

+0

Спасибо Зариаль, я вижу, что Роберт фактически отредактировал мой ответ от str = str.replaceAll ("\ D +", ""); to str = str.replaceAll ("\\ D +", ""); ... Так что я сделал эту ошибку, когда вставлял ее в окно редактора StackO. Так что спасибо Роберту за исправление. Теперь это работает! – Angoranator777

+0

это заниженная причина, потому что это repost. Точный же ответ уже был выпущен 5 лет назад !! см. Выше: https://stackoverflow.com/a/10372905/704246 –

1

Десятичный разделитель валюты может отличаться от Locale to another. В качестве разделителя всегда может быть опасно считать .. т.е.

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

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

  • Получить десятичный символ с помощью DecimalFormatSymbols по умолчанию Locale или указан один.
  • Кук регулярное выражение шаблон с десятичной характер, чтобы получить только цифры

И вот как я ее решения:

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

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

Смежные вопросы