检查Java中的字符串值

时间:2016-04-05 16:47:31

标签: java string substring

我试图找出一个字符串的前两个字母是" 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。

3 个答案:

答案 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 因为两个引用s1s2指向同一个对象。

但是substring()方法的作用是new String("xyz"),如果你声明一个像这样的字符串,那么将创建一个新对象,并且与==的比较将返回false,因为这两个引用显然是不要指向同一个物体。