给定一个字符串,如果字符串以“hi”开头则返回true,否则返回false。示例输出:
startHi("hi there") = true
startHi("hi") =true
startHi("hello hi") =false
实际代码:
public boolean startHi(String str) {
String firstTwo = str.substring(0,2);
if (str.length() < 2) return false;
if (firstTwo.equals("hi")) {
return true;
} else {
return false;
}
}
除了少于2个字符的字符串外,一切都在运行。它不断给出错误:
异常:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:2(行号:2)
答案 0 :(得分:2)
您需要移动substring
电话后面的长度检查!
public boolean startHi(String str) {
if (str.length() < 2) return false;
String firstTwo = str.substring(0,2);
if (firstTwo.equals("hi")) {
return true;
} else {
return false;
}
}
对substring
的调用失败,因为它 - 如异常告诉我们 - 需要一个长度为2(或更长)的字符串。
<强> BUT 强>
由于Java字符串具有startsWith
方法,因此整个方法可能要简单得多:
public boolean startHi(String str) {
return str.startsWith("hi");
}
答案 1 :(得分:1)
尝试反转方法的前两个字符串。
public boolean startHi(String str) {
if (str.length() < 2) return false;
String firstTwo = str.substring(0,2);
....
}
否则,如果您将substring
行留在首位,则您已经假设该字符串长度至少为2个字符。如果不是这样,它将导致异常。将长度验证置于首位可确保字符串的最小长度。
Beyind,您可以尝试使用String方法startsWith
。
答案 2 :(得分:0)
试试这个:
public boolean startHi(String str) {
if (str.length() < 2) return false;
else{
String firstTwo = str.substring(0,2);
if (firstTwo.equals("hi")) {
return true;
}
else {
return false;
}
}
}
答案 3 :(得分:0)
如评论中所述,请考虑使用String类的内置startsWith方法。它的实现可以通过sun jdk源代码获得。
/**
* Tests if the substring of this string beginning at the
* specified index starts with the specified prefix.
*
* @param prefix the prefix.
* @param toffset where to begin looking in this string.
* @return {@code true} if the character sequence represented by the
* argument is a prefix of the substring of this object starting
* at index {@code toffset}; {@code false} otherwise.
* The result is {@code false} if {@code toffset} is
* negative or greater than the length of this
* {@code String} object; otherwise the result is the same
* as the result of the expression
* <pre>
* this.substring(toffset).startsWith(prefix)
* </pre>
*/
public boolean startsWith(String prefix, int toffset) {
char ta[] = value;
int to = toffset;
char pa[] = prefix.value;
int po = 0;
int pc = prefix.value.length;
// Note: toffset might be near -1>>>1.
if ((toffset < 0) || (toffset > value.length - pc)) {
return false;
}
while (--pc >= 0) {
if (ta[to++] != pa[po++]) {
return false;
}
}
return true;
}
public boolean startsWith(String prefix) {
return startsWith(prefix, 0);
}
答案 4 :(得分:0)
最简单的方法是使用字符串的startsWith方法,但是如果它是null,则需要先检查它。
public boolean startsWithHi(String str) {
if (str == null) {
return false;
}
return str.startsWith("hi");
}
如果字符串以&#34; HI&#34;开头。也需要返回true,你应该做str.toLowerCase()。startsWith(&#34; hi&#34;);