как сделать счетчик символов без пробелов и пробелов? - PullRequest
1 голос
/ 29 марта 2019

enter image description here

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

Я ожидаючто счетчик будет показывать число «7» в соответствии с количеством символов, введенных в тексте редактирования.Поэтому я хочу исключить пробел, а также пробел (enter, \ n) для подсчета в счетчике слов.

, но, к сожалению, я получаю «9» вместо «7».Вот код, который я использую:

class CreateEventDescriptionFragment : Fragment() {

    lateinit var fragmentView : View
    lateinit var inputEventDescriptionEditText : EditText
    lateinit var wordsCounterTextView: TextView

    lateinit var mContext : Context
    lateinit var mActivity : FragmentActivity

    override fun onAttach(context: Context) {
        super.onAttach(context)

        mContext = context
        activity?.let { mActivity = it }

    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        fragmentView = inflater.inflate(R.layout.fragment_create_event_description, container, false)

        setUpViewsDeclaration()
        setUpListeners()


        return fragmentView
    }


    private fun setUpViewsDeclaration() {
        inputEventDescriptionEditText = fragmentView.findViewById(R.id.editText_event_description_input)
        wordsCounterTextView = fragmentView.findViewById(R.id.textView_words_counter_event_description)
    }


    private fun setUpListeners() {

        inputEventDescriptionEditText.addTextChangedListener(object: TextWatcher {
            override fun afterTextChanged(s: Editable?) {

                setWordsCounter(s)
                wordsCounterTextView.text = "$numberOfInputWords"

            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {

            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {

                setWordsCounter(s)
                wordsCounterTextView.text = "$numberOfInputWords"

            }

        })

    }

    private fun setWordsCounter(words: CharSequence?) {

        val rawInputString = words.toString().trim()
        val removedEmptyLineInputString = rawInputString.replace("(?m)^[ \t]*\r?\n", "")
        val removedEmptySpaceInputString = removedEmptyLineInputString.replace(" ", "")

        numberOfInputWords = removedEmptySpaceInputString.count()

    }



}

Java в порядке.что здесь пошло не так?

1 Ответ

2 голосов
/ 29 марта 2019

Я решил, изменив ваш метод на этот:

private fun setWordsCounter(words: CharSequence?) {
    val rawInputString = words.toString()
        .trim()
        .replace(" ","")
        .replace("\n","")
    numberOfInputWords = rawInputString.length
}

Что он делает, сначала trim() - Удалите все пробелы, а затем удалите все new lines.

И вывод такой:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...