Удалить символ из строки в Котлине

Я пытаюсь создать калькулятор Android, который использует строки в Kotlin. Моя проблема в том, как удалить запятую (или отрицательную), если она уже есть.

Вот мой код, он правильно добавляет запятую, но не удаляет ее, если пользователь щелкает снова:

if (!buClickValue.contains(".")) {
                    buClickValue += "."
                } else {
                    buClickValue.replace(".", "")
                }
            }

или вот мой Github

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

Tim Biegeleisen 18.03.2018 04:14

Простите мою ошибку. Если вы посмотрите на код, вы увидите, что если нет "." в строке он должен добавить единицу к строке, но если она уже есть, он должен удалить ее.

Marcus Mondel 18.03.2018 04:20

Непонятно, о чем вы спрашиваете.

Tim Biegeleisen 18.03.2018 04:20

У меня вопрос, как удалить "."? // Я добавил свой git к вопросу, может быть, это поможет

Marcus Mondel 18.03.2018 04:23

Замена - не лучший способ удалить символ или последовательность в строке: используйте фильтр вместо замены

Luc-Olivier 01.11.2019 01:51
39
5
43 585
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Метод replace() предназначен для возврата значения нового String после замены символов. В вашем случае значение, полученное после замены символов, никогда не переназначается обратно исходной переменной.

В частности, в вашем предложении else строку следует изменить на -

buClickValue = buClickValue.replace(".", "")

Большое спасибо, что решили мою проблему и хорошо ее объяснили!

Marcus Mondel 18.03.2018 04:38

Более логичный прием - не заменять, а фильтровать

buClickValue = buClickValue.filterNot { it == "."[0]) }

Или продлить

filtered = ".,;:"

buClickValue = buClickValue.filterNot { filtered.indexOf(it) > -1 }

1-й пример больше не компилировался. Я добавил ".get (0)"

Luc-Olivier 16.02.2021 22:50

Это должно быть предпочтительнее принятого ответа. Хороший ответ!

Sakiboy 05.05.2021 21:00

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