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