我有以下代码。
import java.io.File;
import java.util.ArrayList;
import java.util.Scanner;
public class Dummy {
public static void main(String args[]) throws Exception {
String word="hi";
String[] one={"a","b","c"};
String[] two={"d","e","f"};
String[] three={"g","h","i"};
String[] four={"j","k","l"};
String[] five={"m","n","o"};
String[] six={"p","q","r","s"};
String[] seven={"t","u","v"};
String[] eight={"w","x","y","z"};
for(int i=0;i<word.length();i++)
{
for(int j=0;j<three.length;j++)
{
if(three[j].equals(word.charAt(i)))
{
System.out.println("Matched");
}
else
{
System.out.println("err");
}
}
}
}
}
这里我的概念是将字符串中的字母与创建的数组匹配,这里的输出都是错误的(条件表明不匹配)。请告诉我哪里出错了。
由于
答案 0 :(得分:3)
您正在将单字符字符串(来自数组)与字符进行比较。将您的数组设为char
,而不是String
。 (并使用==
来比较它们。)
答案 1 :(得分:1)
for循环中的元素three [j]是String,而word.charAt(i)是char ..所以equals()对那些将始终为false。
您应该将其更改为
如果(3 [j]的.equals(将String.valueOf(word.charAt(I))))
这样它可以比较字符串的实际上下文,或者将数组(一,二,三......)定义为char数组而不是字符串数组,这样就可以简单地使用==。
请检查String,Object和其他JavaDoc中的equals(),可能还需要检查hashCode()以完全理解equals()在Java中的含义。
答案 2 :(得分:0)
charAt返回char而不是字符串,因此它不能与String“等于”
答案 3 :(得分:0)
为什么不使用String.indexOf()?
for(int j=0;j<three.length;j++)
{
if(word.indexOf(three[j]) == -1)
{
System.out.println("err");
}
else
{
System.out.println("Matched");
}
}
这样你就可以进入一个循环..
答案 4 :(得分:0)
试试这样:
StringBuffer result = new StringBuffer();
for (int i = 0; i < one.length; i++) {
result.append(one[i]);
}
if (result.toString().equals(word)) {
System.out.println("Matched");
} else {
System.out.println("err");
}
答案 5 :(得分:0)
只是说明显的....有时看到实际代码是有帮助的。以下是java.lang.String
的摘录特别注意大胆的情况。如果instanceof失败,则返回false!
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (**anObject instanceof String**) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}