我试图找出一个字符串的前两个字母是" hi"。如果它确实它shold返回true,如果不是,它应该返回false。我使用substring来查找给定字符串的值,但是当条件出现时,它不会返回true。我一定不能理解Java,这是我的新手。
这是我的代码:
class Main {
public boolean startHi(String str) {
String str1 = str.substring(0,1);
String str2 = str.substring(1,2);
if(str1=="h" && str2=="i"){
return true;
}
if(str!="hi" || str.length()<=2){
return false;
}
else{
return false;
}
}
public static void main(String[] args) {
System.out.println(new Main().startHi("hi ho"));
System.out.println(new Main().startHi("hi"));
System.out.println(new Main().startHi("howhi"));
}
}
字符串以&#34; hi&#34;开头。它看到了,但它返回false。
答案 0 :(得分:2)
您可以使用String.startsWith(String prefix)
public boolean startHi(String str) {
return str.startsWith("hi");
}
因此,毕竟您可能不需要自己的startHi()
方法,但可以使用标准Java API。
答案 1 :(得分:1)
试试这个......
if(str1.equals("h") && str2.equals("i")) //equals use instead of (==) Operator.
代替
if(str1 =="h" && str2 == "i")
OR
if(str.startsWith("hi") // this will also works
答案 2 :(得分:1)
它不会返回true
,因为您必须使用equals()
方法比较字符串。
if("h".equals(str1) && "i".equals(str2)){
return true;
}
如果使用==
来比较对象,它将检查它是否是同一个对象,因此它会检查对象的内存地址是否相同。
字符串类会覆盖equals()
方法以检查内容。
如果你正在创建一个像这样的字符串
String s1 = "Hi";
Java会将"Hi"
放在所谓的字符串文字池中
所以,如果你要创建第二个字符串
String s2 = "Hi";
Java不会创建第二个Object,但会引用字符串文字池中的“Hi”。
现在你可以比较像s1 == s2
这样的两个字符串,它会是true
因为两个引用s1
和s2
指向同一个对象。
但是substring()
方法的作用是new String("xyz")
,如果你声明一个像这样的字符串,那么将创建一个新对象,并且与==
的比较将返回false,因为这两个引用显然是不要指向同一个物体。