我是Java的新手,也是编码新手。我在codingBat上尝试一个热身问题。当我在第一个if条件之后切换语句代码有效并且我不知道为什么。
这就是问题:
给定一个字符串,如果字符串以“hi”和false开头,则返回true 否则。
startHi("hi there") → true
startHi("hi") → true
startHi("hello hi") → false
以下是我首先尝试的代码:
public boolean startHi(String str)
{
**String str2= str.substring(0,2);** **//gives error using parameter less than 2 characters long.**
/*
**//startHi("h") → false
StringIndexOutOfBoundsException: String index out of range: 2 (line:3)**
*/
if (str.length()<2)
{
return false;
}
if (str2.equals("hi"))
{
return true;
}
else
{
return false;
}
}
移动时,它是正确的并通过测试。没有错误。
public boolean startHi(String str)
{
if (str.length()<2)
{
return false;
}
**String str2= str.substring(0,2);** //now I magically work
if (str2.equals("hi"))
{
return true;
}
else
{
return false;
}
}
任何人都可以用相对简单的术语告诉我为什么在if语句下面移动那个声明让它起作用?
答案 0 :(得分:0)
说,你有一个只有一个字符的字符串。
如果您尝试substring(0,2)
,则尝试阅读2个字符,但只有一个字符。这会引发错误。
如果您首先放置length()<2
条件,并且只有一个字符returns false
。 return语句立即结束该函数。以下代码无法访问。它没有执行。因此,没有错误。
您应首先检查以阻止这些错误。
还有一种内置方法可以做到这一点。试试str.startsWith("Hi")
。