«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему `reader.ReadString` не удаляет начальный разделитель?

Почему `reader.ReadString` не удаляет начальный разделитель?

Опубликовано 21 декабря 2024 г.
Просматривать:234

Why Doesn't `reader.ReadString` Remove the Initial Delimiter?

reader.ReadString не удаляет начальный разделитель

В попытке создать программу, которая приветствует пользователей по имени Алиса или Боб, разработчик столкнулся с проблемой, из-за которой даже законные имена вызывали нежелательный ответ. Программа ошибочно отказала во входе Алисе и Бобу.

Проблема

Проблема связана с использованием readString('\n') в программе. . Эта функция извлекает символы до тех пор, пока не встретится символ новой строки. Однако он не удаляет разделитель из возвращаемой строки автоматически, что приводит к включению дополнительной новой строки во вводимые пользователем данные.

Решение

Чтобы решить эту проблему , существует два возможных подхода:

1. Обрезать новую строку

Используйте функцию strings.TrimSpace, чтобы удалить любые ведущие или конечные пробелы из входной строки перед ее оценкой. Это эффективно удаляет символ новой строки, вызвавший проблему.

if aliceOrBob(strings.TrimSpace(text)) {
    fmt.Printf("Hello, ", text)
}

2. Используйте ReadLine вместо ReadString

В качестве альтернативы вместо ReadString можно использовать функцию ReadLine. ReadLine извлекает строку текста без включения символа новой строки в возвращаемую строку.

text, _, _ := reader.ReadLine()
if aliceOrBob(string(text)) {
    fmt.Printf("Hello, ", text)
}

Объяснение

Причина использования string(text) с ReadLine заключается в том, что ReadLine возвращает фрагмент байта, а aliceOrBob требует строковый аргумент.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3