我有一个带有验证工具的Scrabble Clock。 如果我检查的单词在列表中,则验证单词的空间将显示为绿色或红色。
问题是,如果我使用sbuffer.toString().contains
并写一个类似ABA
的单词,尽管ABA
不在列表中,但{{1} },ABAC
在列表中。
我想知道如何在代码中实现条件以检查确切的完整单词。
我已经研究了正则表达式,边界和匹配项,但是找不到在我的代码中包含单词的行代码。
这是到目前为止的代码。
ABACA
答案 0 :(得分:2)
字符串上的contains
方法测试目标是否作为子字符串包含在 中;如果ABAC
作为子字符串包含,那么ABA
也是如此,因为ABA
是ABAC
的子字符串,因此它也是{{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
类包含一些方法,可用于比较两个字符串的内容,您可以根据需要选择相应的方法以匹配确切的用例:
contentEquals(CharSequence cs)
和contentEquals(StringBuffer sb)
都检查传递的字符串表示的内容是否与当前内容匹配。equals(Object str)
与contentEquals
的相似之处在于,它在两个字符串之间进行了精确的比较,但是它还会检查以确保传递的对象实际上是一个字符串。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);
}
}