首页 > 解决方案 > 使用 .contains 和多个单词

问题描述

美好的一天,我怎样才能使用包含多个单词?

 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,则会出现错误。

但该代码不适合我的情况,因为我多次使用这种布局。那么有没有另一种方法或简单的方法来在多个单词中使用包含方法而不使用字符串数组?或者我可以在另一个字符串数组上插入字符串数组吗?(因为我认为这会解决我的问题)

标签: javaandroidandroid-studio

解决方案


添加 for 循环时您正在做的事情是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();

这将根据答案检查流中的所有单词,一旦它们中的任何一个匹配,它将触发 Toast。

如果您需要一次使它们全部匹配,那么您可以将 Stream::anyMatch 替换为 Stream::allMatch


推荐阅读