使用charAt和substring的不同输出

时间:2015-10-23 08:32:21

标签: java substring charat

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

  

给定一个字符串,返回由前2个字符组成的字符串(如果存在),但是只有当它是' o'并包括   仅当它是' z',所以" ozymandias"收益率" oz"。   startOz(" ozymandias")→" oz" startOz(" bzoo")→" z" startOz(" oxx")→   " O"

我已经看过解决方案了解它,但无法弄清楚为什么我自己尝试使用substring而不是' charAt生成不同的输出。为什么我自己使用子字符串的code1给出了不同的输出然后我会使用' 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;
}

output code1

//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;
}

output code2

2 个答案:

答案 0 :(得分:1)

这是substring(int index)

的文档
  

public String substring(int beginIndex)

     

返回一个新字符串,该字符串是此字符串的子字符串。子串   从指定索引处的字符开始并扩展到   这个字符串的结尾。

因此,对于第一个if,您获得ozymandias并且它不等于o。 正确的是使用:

substring(int beginIndex, int endIndex)

文档:

  

public String substring(int beginIndex,                  int endIndex)

     

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

     

endIndex的-的beginIndex。

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

答案 1 :(得分:0)

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