2016-04-05 4 views
1

Im пытается найти, если первые две буквы строки являются «привет». Если он делает это, верните true, и если нет, он должен вернуть false. Я использовал подстроку, чтобы найти значения данной строки, но когда условие вернется, оно не возвращает true. Я не должен понимать что-то о Java, к которому я новичок.Проверка строковых значений в 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")); 
    } 
} 

строка начинается с «привет», и он видит, что, но она возвращает ложь.

ответ

1

Это не возвращение true, потому что у вас есть для сравнения строк с помощью метода equals().

if("h".equals(str1) && "i".equals(str2)){ 
     return true; 
    } 

Если вы используете == для сравнения объектов будет проверить, если это тот же объект, поэтому он проверяет адреса памяти объектов одинаковы.

Класс string переопределяет метод equals() для проверки содержимого.

Если вы создаете строку, как этот

String s1 = "Hi"; 

Java поместит "Hi" в так называемой строкового литерала пула , так что если вы создаете вторую строку

String s2 = "Hi"; 

Java не будет создать второй объект, но будет ссылаться на «Привет» в пуле строковых литералов.

Теперь вы могли бы сравнить две строки, как s1 == s2 и было бы true , поскольку две ссылки s1 и s2 указывают на тот же объект.

Но что метод substring() делает new String("xyz") и если вы объявляете строку, как это новый объект будет создан, и сравнение с == вернет ложь, потому что две ссылки явно не указывают на тот же объект.

+0

Это работает, спасибо. Вы не можете использовать операторы сравнения только для строк в Java или? – JonnyDoeInWisco

+0

Я отредактировал свой ответ. Надеюсь, это поможет вам немного – Dimi

+0

Он делает очень много, спасибо. – JonnyDoeInWisco

2

Вы можете использовать String.startsWith(String prefix)

public boolean startHi(String str) { 
    return str.startsWith("hi"); 
} 

Так ведь вы, наверное, не нужен собственный startHi() метода, но можете использовать стандартный Java API.

1

Попробуйте это ...

if(str1.equals("h") && str2.equals("i")) //equals use instead of (==) Operator. 

вместо того

if(str1 =="h" && str2 == "i") 

ИЛИ

if(str.startsWith("hi") // this will also works 
Смежные вопросы