【问题标题】:Different output using charAt and substring使用 charAt 和 substring 的不同输出
【发布时间】:2016-01-22 17:37:49
【问题描述】:

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

给定一个字符串,返回一个由前 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;
}

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

【问题讨论】:

  • 因为substring(int beginIndex)beginIndex - string.length 创建了一个子字符串,并且不只返回beginIndex 的单个字符。你宁愿找substring(int beginIndex, int endIndex)

标签: java substring charat


【解决方案1】:

这里是 substring(int index) 的文档

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

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

所以对于第一个if,你得到ozymandias,它不等于o。 正确的是使用:

substring(int beginIndex, int endIndex)

文档:

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

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

endIndex-beginIndex.

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 2013-09-30
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      相关资源
      最近更新 更多