0

对编程仍然很陌生,并且正在使用一些练习来理解基础知识。这是我的任务:

给定一个字符串,返回一个由前 2 个字符组成的字符串(如果存在),但是只有当它是 'o' 时才包含第一个字符,并且只有当它是 'z' 时才包含第二个字符,所以 "ozymandias" 产生 "oz"。startOz("ozymandias") → "oz" startOz("bzoo") → "z" startOz("oxx") → "o"

我已经看过解决方案并理解它,但无法弄清楚为什么我自己尝试使用 substring 而不是 'charAt 会生成不同的输出。为什么我自己的 code1 使用 substring 会给出不同的输出,然后我会使用 'charAt?Code1 是我自己的尝试,code2 是给定的解决方案。在附件中,您将找到两个输出。谢谢!

//code 1 own attempt
public String startOz(String str) {
String answer = "";

if ( str.length() >= 1 && str.substring( 0 ).equals("o")) {
answer =   answer + str.substring(0);
}
if ( str.length() >= 2 && str.substring( 1 ).equals("z")) {
answer =   answer + str.substring(1);
}
return answer;
}

输出代码1

//code 2 the solution
public String startOz(String str) {
String answer = "";

if ( str.length() >= 1 && str.charAt( 0 ) == 'o') {
answer =   answer + str.charAt(0);
}
if ( str.length() >= 2 && str.charAt( 1 ) == 'z') {
answer =   answer + str.charAt(1);
}
return answer;
}

输出代码2

4

2 回答 2

1

这是 substring(int index) 的文档

公共字符串子字符串(int beginIndex)

返回一个新字符串,它是该字符串的子字符串。子字符串以指定索引处的字符开始并延伸到该字符串的末尾。

所以首先if你得到ozymandias并且它不等于o。正确的是使用:

substring(int beginIndex, int endIndex)

文档:

公共字符串子字符串(int beginIndex,int endIndex)

返回一个新字符串,它是该字符串的子字符串。子字符串从指定的 beginIndex 开始并延伸到索引 endIndex - 1 处的字符。因此子字符串的长度为

endIndex-beginIndex。

链接:http ://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring%28int%29

于 2015-10-23T08:39:18.037 回答
0

阅读 javadocs String#substring- 您需要添加一个额外的参数来指定子字符串的结尾,否则它会返回字符串的其余部分。

于 2015-10-23T08:38:56.310 回答