检查拼字游戏单词列表中的确切单词

时间:2019-12-14 17:28:18

标签: java android

我有一个带有验证工具的Scrabble Clock。 如果我检查的单词在列表中,则验证单词的空间将显示为绿色或红色。

问题是,如果我使用sbuffer.toString().contains并写一个类似ABA的单词,尽管ABA不在列表中,但{{1} },ABAC在列表中。

我想知道如何在代码中实现条件以检查确切的完整单词。

我已经研究了正则表达式,边界和匹配项,但是找不到在我的代码中包含单词的行代码。

这是到目前为止的代码。

ABACA

4 个答案:

答案 0 :(得分:2)

字符串上的contains方法测试目标是否作为子字符串包含在 中;如果ABAC作为子字符串包含,那么ABA也是如此,因为ABAABAC的子字符串,因此它也是{{1} }是的子字符串。因此,ABAC方法在逻辑上不可能返回String.contains的{​​{1}}和true的{​​{1}}。

您想测试目标是否为字符串集合中的元素之一,因此您应该在字符串集合中而不是字符串上使用contains。最好的选择是HashSet,因为它平均在O(1)时间内执行成员资格测试。

ABAC

答案 1 :(得分:0)

StringBuffer的{​​{1}}检查给定的字符串是否是contains()中文本的子字符串。也就是说,它将输出sbuffer以便在“ ABC ”,“ ABC BC”,“ Z ABC ”中搜索“ ABC” ”,“ Z ABC BC” ...

如果您想在true中搜索完整的单词,则可以在sbuffer中添加单词时查找"\n" + "ABC" + "\n",因为在向sbuffer添加单词时要添加“ \ n”:{ {1}}。但是,还必须使用“ \ n”初始化sbuffer.append((data + "\n"));sbuffer

StringBuffer sbuffer = new StringBuffer("\n");

测试代码:

sbuffer.toString().contains("\n" + "ABC" + "\n"); // this will do the trick

测试输出:

class Main {
  public static void main(String[] args) {
    StringBuffer sbuffer = new StringBuffer("\n");
    StringBuffer sbuffer2 = new StringBuffer("\n");

    sbuffer.append("ABC" + "\n");
    sbuffer.append("ABCBC" + "\n");
    sbuffer.append("ZABC" + "\n");
    sbuffer.append("ZABCBC" + "\n");

    System.out.println("Is ABC in sbuffer = " + sbuffer.toString().contains("\n" + "ABC" + "\n"));

    sbuffer2.append("ABCBC" + "\n");
    sbuffer2.append("ZABC" + "\n");
    sbuffer2.append("ZABCBC" + "\n");

    System.out.println("Is ABC in sbuffer2 = " + sbuffer2.toString().contains("\n" + "ABC" + "\n"));
  }
}

答案 2 :(得分:0)

正如@Ashutosh KS已经提到的,在这种情况下String.contains并不是您真正要寻找的东西:您想检查两个字符串是否相同,而不是检查一个是否包含其他。

Java String类包含一些方法,可用于比较两个字符串的内容,您可以根据需要选择相应的方法以匹配确切的用例:

  1. contentEquals(CharSequence cs)contentEquals(StringBuffer sb)都检查传递的字符串表示的内容是否与当前内容匹配。
  2. equals(Object str)contentEquals的相似之处在于,它在两个字符串之间进行了精确的比较,但是它还会检查以确保传递的对象实际上是一个字符串。
  3. 顾名思义,
  4. equalsIgnoreCase(String anotherString)将在忽略字符串大小写的情况下进行检查。

这些是比较本机API公开的两个字符串的“正确”方法,因此虽然绝对有可能使用其他方法,但最好还是坚持使用这些方法。

答案 3 :(得分:0)

现在我有了它,并且可以工作,但是我有一个带有文字的文件,我想将这些文件添加到diccionario中。

但是我不知道如何读取文件。我已经尝试过bufferread,但是我需要try / catch,但是不起作用。...

其他一些解决方案......

谢谢

boton2.setOnClickListener(new View.OnClickListener()
        {

           String content;
           @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
           @Override
            public void onClick(View view)
            {
                HashSet<String> diccionario = new HashSet<String>();
                //Adding elements to HashSet
                diccionario.add("CASA");
                diccionario.add("ABAC");

                if(diccionario.contains(textIn.getText().toString().toUpperCase()))
                {
                    textIn.setBackgroundColor(Color.GREEN);
                }
                else
                {
                    textIn.setBackgroundColor(Color.RED);
                }

            }