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

Java 检查拼字列表中的确切单词,java,android,Java,Android,我有一个带验证工具的拼字时钟。 如果我检查的单词在列表中,验证单词空间将显示为绿色或红色 问题是,如果我使用sbuffer.toString().contains,并编写一个类似ABA的单词,单词空间看起来是绿色的,尽管ABA不在列表中,但ABAC,ABACA在列表中 我想知道如何在我的代码中实现一个条件来检查确切的完整单词 我已经研究过正则表达式、边界和匹配,但我找不到一个在代码中包含单词的行代码 这是我到目前为止的代码 public class MainActivity extends Ap

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

问题是,如果我使用
sbuffer.toString().contains
,并编写一个类似
ABA
的单词,单词空间看起来是绿色的,尽管
ABA
不在列表中,但
ABAC
ABACA
在列表中

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

我已经研究过正则表达式、边界和匹配,但我找不到一个在代码中包含单词的行代码

这是我到目前为止的代码

public class MainActivity extends AppCompatActivity {

    TextView textView;
    TextView textInV;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.texto_1);
        textView.setMovementMethod(new ScrollingMovementMethod());
        textInV = findViewById(R.id.textIn);

        String data = "";
        StringBuffer sbuffer = new StringBuffer();

        InputStream is = this.getResources().openRawResource(R.raw.fruits);

        BufferedReader reader = new BufferedReader((new InputStreamReader(is)));

        if (is != null)
        {
            try
            {
                while((data =reader.readLine())!=null)
                {
                    sbuffer.append((data + "\n"));
                }

                is.close();

            }
            catch (Exception e){ e.printStackTrace();}
        }

        textView.setText(sbuffer);
    }
}
字符串上的方法测试目标是否包含为子字符串;如果
ABAC
包含为子字符串,则
ABA
也包含为子字符串,因为
ABA
ABAC
的子字符串,因此它也是
ABAC
是的子字符串的任何字符串的子字符串。因此,
String.contains
方法在逻辑上不可能为
ABAC
返回
true
,为
ABA
返回
false

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

导入java.util.*; >Set allowed=新的HashSet(); >允许。添加(“ABAC”); >允许。添加(“ABACA”); >允许。包含(“ABA”) 假的 >允许。包含(“ABAC”) 真的 字符串上的方法测试目标是否包含为子字符串;如果
ABAC
包含为子字符串,则
ABA
也包含为子字符串,因为
ABA
ABAC
的子字符串,因此它也是
ABAC
是的子字符串的任何字符串的子字符串。因此,
String.contains
方法在逻辑上不可能为
ABAC
返回
true
,为
ABA
返回
false

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

导入java.util.*; >Set allowed=新的HashSet(); >允许。添加(“ABAC”); >允许。添加(“ABACA”); >允许。包含(“ABA”) 假的 >允许。包含(“ABAC”) 真的
StringBuffer
包含()
检查给定字符串是否是
sbuffer
中文本的子字符串。也就是说,它将输出
true
以在“ABC”、“ABCBC”、“ZABC”、“ZABCBC”中搜索“ABC”

如果要在
sbuffer
中搜索完整的单词,则可以查找
“\n”+“ABC”+“\n”
,因为在
sbuffer
中添加单词时添加了“\n”:
sbuffer.append((数据+“\n”)。但是,您还必须用“\n”初始化
sbuffer
StringBuffer sbuffer=newstringbuffer(“\n”)

sbuffer.toString()包含(“\n”+“ABC”+“\n”);//这样就行了
测试代码:

主类{
公共静态void main(字符串[]args){
StringBuffer sbuffer=新的StringBuffer(“\n”);
StringBuffer sbuffer2=新的StringBuffer(“\n”);
sbuffer.append(“ABC”+“\n”);
sbuffer.append(“ABCBC”+“\n”);
sbuffer.append(“ZABC”+“\n”);
sbuffer.append(“ZABCBC”+“\n”);
System.out.println(“sbuffer=“+sbuffer.toString()”中的ABC是否包含(“\n”+“ABC”+”\n”);
sbuffer2.append(“ABCBC”+“\n”);
sbuffer2.append(“ZABC”+“\n”);
sbuffer2.append(“ZABCBC”+“\n”);
System.out.println(“是sbuffer2中的ABC=“+sbuffer2.toString()。包含”(“\n”+“ABC”+”\n”);
}
}
测试输出:

Is ABC in sbuffer = true
Is ABC in sbuffer2 = false

StringBuffer
contains()
检查给定字符串是否是
sbuffer
中文本的子字符串。也就是说,它将输出
true
以在“ABC”、“ABCBC”、“ZABC”、“ZABCBC”中搜索“ABC”

如果要在
sbuffer
中搜索完整的单词,则可以查找
“\n”+“ABC”+“\n”
,因为在
sbuffer
中添加单词时添加了“\n”:
sbuffer.append((数据+“\n”)。但是,您还必须用“\n”初始化
sbuffer
StringBuffer sbuffer=newstringbuffer(“\n”)

sbuffer.toString()包含(“\n”+“ABC”+“\n”);//这样就行了
测试代码:

主类{
公共静态void main(字符串[]args){
StringBuffer sbuffer=新的StringBuffer(“\n”);
StringBuffer sbuffer2=新的StringBuffer(“\n”);
sbuffer.append(“ABC”+“\n”);
sbuffer.append(“ABCBC”+“\n”);
sbuffer.append(“ZABC”+“\n”);
sbuffer.append(“ZABCBC”+“\n”);
System.out.println(“sbuffer=“+sbuffer.toString()”中的ABC是否包含(“\n”+“ABC”+”\n”);
sbuffer2.append(“ABCBC”+“\n”);
sbuffer2.append(“ZABC”+“\n”);
sbuffer2.append(“ZABCBC”+“\n”);
System.out.println(“是sbuffer2中的ABC=“+sbuffer2.toString()。包含”(“\n”+“ABC”+”\n”);
}
}
测试输出:

Is ABC in sbuffer = true
Is ABC in sbuffer2 = false

正如@Ashutosh KS已经提到的,
String.contains
并不是您在本例中要查找的内容:您要检查两个字符串是否相同,而不是一个字符串是否包含另一个字符串

Java类包含一些方法,您可以使用这些方法来比较两个字符串的内容,您可以相应地选择其中的一些方法来匹配您的确切用例:

  • contentEquals(CharSequence cs)
    contentEquals(StringBuffer sb)
    都检查传递的字符串表示的内容是否与当前的内容匹配
  • equals(objectstr)
    类似于
    cont