Удалить вторую точку / запятую в EditText

Я хочу сложить несколько чисел из EditText. Я хочу, чтобы он работал как для Европы, так и для других стран, поэтому он должен работать с запятыми и точками в качестве разделителей. Проблема в том, что приложение вылетает, если пользователь случайно ставит 2 или более точки или точку и запятую. Есть ли быстрый способ проверить и удалить ненужные разделители? Большое спасибо!

Это мой код на данный момент:

android:inputType = "number|numberDecimal"
android:digits = "0123456789.,"

.replace(",", "."));

Вы можете не беспокоиться обо всем этом вместе и загрузить JavaScript WebView для EditText, поэтому, когда пользователь нажимает submit, строка из EditText оценивается как математическое выражение с использованием JS (я сделал это с моим самым первым приложением-калькулятором для Android, а не с лучшее решение, но знайте, что это просто и очень возможно). Другой / самый простой способ на чистом Java - использовать метод replaceAll() для строки, чтобы удалить лишние символы, которые вы хотите, после того, как вы определили, что есть ненужные разделители. Или вы можете показать тост с ошибкой, если ваша логика обнаружит лишние разделители и позволит пользователю исправить это.

ViaTech 22.12.2018 15:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
237
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это должно помочь,

.replaceAll("\\,+", ".").replaceAll("\\.+", ".")

если есть какие-либо запятые, первая заменит все запятые точками, а вторая заменит все точки одной точкой

Спасибо, это отлично работает для чего-то вроде 1 ... 1 или 1`` 2, но все равно вылетает на чем-то вроде 1,1,

einUsername 22.12.2018 15:26

@einUsername Значит, точка может существовать только в конце строки? Не может быть таких строк, как 11.2?

Sandeepa 22.12.2018 15:28

Это работает, если в середине строки есть одна / несколько точек подряд, например 0..0. Но это не сработает, если точки разделены числом, например 0,0.0, или если точка находится в начале или конце строки, например .0 и 0.

einUsername 22.12.2018 15:31

да. Я понимаю эту роль. Я просто хочу кое-что прояснить. Можно ли использовать числа вроде 11.21 в виде цифр? Если это возможно, то если кто-то вводит 11.2.1 в виде цифр, как мы можем узнать, что 11.21 или 112.1 правильные? это было бы невозможно, правда?

Sandeepa 22.12.2018 15:35

11.21 работает. Да, невозможно сказать, что они имеют в виду. Но давайте предположим, что первая точка была правильной.

einUsername 22.12.2018 15:42

Или, может быть, просто показать сообщение об ошибке, если точек / запятых больше одной.

einUsername 22.12.2018 15:44

да. Мы не можем решать такие сценарии. Лучше всего показать сообщение об ошибке и позволить пользователю решить

Sandeepa 22.12.2018 15:55

Это заменит всю строку на 0. Это некрасиво, но, по крайней мере, предохраняет приложение от сбоев. Думаю, пока это нужно сделать;)

if (string.getText (). toString (). соответствует (". \ .. \ .. *")) {string.setText ("0");}

Другие вопросы по теме