Попытка удалить все буквы и символы, которые не являются 0-9 и точка. Я использую, Character.isDigit()но он также удаляет десятичную дробь, как я могу также сохранить десятичную?
Это странный способ сказать это. Разве "все буквы и символы, которые не являются 0-9 и точкой", не эквивалентны более простым "всем символам, которые не являются 0-9 и точкой"? Я имею в виду, что буквы - это символы, которые не являются ни 0-9, ни точкой.
Это также может работать:> str = str.replaceAll ("[\\ D.]", "");
даааааааа ... хамф хамф
1
@ Оскар Лопес: как включить отрицательные числа также? Я имею в виду, я должен заменить все, что не является положительным / отрицательным числом, пустым пробелом. Как это сделать?
Панкадж Сингхал
3
@PankajSinghal просто включите знак минус в регулярное выражение:[^\\d.-]
Оскар Лопес
3
@ дааааахххх..хамфхамф нет, это не сработает. Мы должны свести на нет всю группу (включая цифры и точки), предложенный вами код только отрицает цифры, и результат не будет включать точки, как требуется. Вы проверяли это? используя приведенный выше пример кода, ваш код возвращается "1233478", что неверно.
Оскар Лопес
Очень хорошо работает даже в Android. Спасибо.
juanram0n
98
Я бы использовал регулярное выражение.
String text ="-jaskdh2367sd.27askjdfh23";String digits = text.replaceAll("[^0-9.]","");System.out.println(digits);
Не знаю, почему люди отклонили ваше решение ... Очень помогли мне, спасибо! Голоса вверх!
Зариал
Спасибо Зариал, я вижу, что Роберт действительно отредактировал мой ответ от str = str.replaceAll ("\ D +", ""); to str = str.replaceAll ("\\ D +", ""); ... Так что я допустил эту ошибку, вставив ее в окно редактора StackO. Так что спасибо Роберт за исправление. Теперь это работает!
Angoranator777
это опровергнуто, потому что это репост. Точно такой же ответ уже был подсвечен 5 лет назад !! см. выше: stackoverflow.com/a/10372905/704246
Саад Бенбузид
@ СаадБенбузид, а? как вы определяете точно такой же ответ?
Борис Треухов
2
@SaadBenbouzid 1) это комментарий, а не ответ 2) это совершенно другое регулярное выражение 3) не все ответы, использующие регулярное выражение D, похоже на указание на то, что все ответы на языке C, которые используют, printf()являются дубликатами. Также, если вы видите ответ в комментарии, вы можете попросить мод преобразовать его в ответ или даже добавить ответ самостоятельно - ответы в комментариях не рекомендуются в StackOverlow.
Борис Треухов
6
Простой способ без использования Regex:
Добавление дополнительной проверки символов для точки '.'решит требование:
publicstaticString getOnlyNumerics(String str){if(str ==null){returnnull;}StringBuffer strBuff =newStringBuffer();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();}
publicstaticvoid main(String[] args)throwsIOException{String test ="ab19198zxncvl1308j10923.";StringBuilder result =newStringBuilder();
test.chars().mapToObj( i->(char)i ).filter( c ->Character.isDigit(c)|| c =='.').forEach( c -> result.append(c));System.out.println( result );//returns 19198.130810923.}
Это обрабатывает нулевые входные данные, отрицательные числа и десятичные числа (вам необходимо включить библиотеку Apache Commons Lang версии 3.8 или выше в ваш проект):
import org.apache.commons.lang3.RegExUtils;
result =RegExUtils.removeAll(input,"-?[^\\d.]");
Ответы:
Попробуйте этот код:
Теперь
str
будет содержать"12.334.78"
.источник
[^\\d.-]
"1233478"
, что неверно.Я бы использовал регулярное выражение.
печать
Вы могли бы также сохранить
-
отрицательные числа.источник
^
и что.
означает в этом заявлении?[^
средства не эти символы и внутри[]
а.
просто.
.
- это просто aa
и ничего не значит, я могу просто избавиться от этого?.
s в вашем результате.результат: 0097-557890-999
если вам также не нужен "-" в строке, вы можете сделать это так:
результат: 0097557890999
источник
С гуавой:
см. http://code.google.com/p/guava-libraries/wiki/StringsExplained
источник
источник
printf()
являются дубликатами. Также, если вы видите ответ в комментарии, вы можете попросить мод преобразовать его в ответ или даже добавить ответ самостоятельно - ответы в комментариях не рекомендуются в StackOverlow.Простой способ без использования Regex:
Добавление дополнительной проверки символов для точки
'.'
решит требование:источник
Способ заменить его потоком Java 8:
источник
Десятичный разделитель валюты может отличаться от локали к другой. Это всегда опасно считать
.
разделителем. т.е.Я думаю, что правильный путь:
DecimalFormatSymbols
по умолчанию Locale или указанный.И вот как я это решаю:
import java.text.DecimalFormatSymbols;
import java.util.Locale;
код:
Я надеюсь, что это может помочь ».
источник
Для Android люди приходят сюда для Kotlin
Вывод:
Это может быть затем безопасно конвертированы
toDouble()
,toFloat()
илиtoInt()
при необходимостиисточник
Это обрабатывает нулевые входные данные, отрицательные числа и десятичные числа (вам необходимо включить библиотеку Apache Commons Lang версии 3.8 или выше в ваш проект):
Ссылка на библиотеку: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RegExUtils.html
источник