Используйте .contains с несколькими словами - PullRequest
0 голосов
/ 03 мая 2020

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

 String word = "word"

 answer1.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (edittext.getText().toString().contains(word)){
                        Toast.makeText(QuestionActivity.this, "Correct!", Toast.LENGTH_SHORT).show();

Это код, если только одно слово, в нескольких словах я использую это:

     final String[] stringToCheck = new String[]{"word", "life"};
    for (final String s : stringToCheck)
  answer1.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (answer1.getText().toString().contains(s)){
                        Toast.makeText(QuestionActivity.this, "Correct!", Toast.LENGTH_SHORT).show();

если я удаляю строку for, возникает ошибка.

, но этот код не подходит в моем случае, потому что я использую этот макет много раз. Так есть ли альтернативный или простой способ использовать метод в нескольких словах без использования stringarray? Или я могу вставить stringarray на другой массив строк? (потому что я думаю, что это решит мою проблему)

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

То, что вы делаете, добавляя, что для l oop перезаписывает OnKeyListener несколько раз. Что вы можете сделать, это следующее:

final String[] stringToCheck = new String[]{"word", "life"};
final Stream<String> wordsStream = Stream.of(stringToCheck);

  answer1.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
           if (wordsStream.anyMatch(s -> answer1.getText().toString().contains(s))) {
                        Toast.makeText(QuestionActivity.this, "Correct!", Toast.LENGTH_SHORT).show();

Это позволит проверить все слова в потоке на соответствие ответу, и как только какое-либо из них совпадет, будет запущен тост.

Если вам нужно, чтобы все они совпадали, вы можете заменить Stream :: anyMatch на Stream :: allMatch

0 голосов
/ 03 мая 2020

Попробуйте использовать

             public boolean onKey(View v, int keyCode, KeyEvent event) {

                String answer = answer1.getText().toString();

                for (String s : stringToCheck) {
                    if (answer.contains(s)) {
                        Toast.makeText(QuestionActivity.this, "Correct!", Toast.LENGTH_SHORT).show();
                        break;
                    }
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...