Java CodingBat上2个字符串的substring()逻辑
我已经研究过好几次了,但是我不知道CodingBat的解决方案代码如何正确地返回两个字符的字符串 这就是他们的解决方案:Java CodingBat上2个字符串的substring()逻辑,java,string,Java,String,我已经研究过好几次了,但是我不知道CodingBat的解决方案代码如何正确地返回两个字符的字符串 这就是他们的解决方案: public String frontBack(String str) { if (str.length() <= 1) return str; String mid = str.substring(1, str.length()-1); // last + mid + first return str.charAt(str.length()-1) +
public String frontBack(String str) {
if (str.length() <= 1) return str;
String mid = str.substring(1, str.length()-1);
// last + mid + first
return str.charAt(str.length()-1) + mid + str.charAt(0);
}
publicsstringfrontback(stringstr){
如果(str.length()代码交换字符串的第一个和最后一个字符。对于长度为2的字符串,它在mid中不存储任何内容,因为str.substring(1,1)返回空字符串。然后它返回最后一个字符、存储在mid中的空字符串和第一个字符的串联
public class MyClass {
public static void main(String args[]) {
String str = "AB";
if (str.length() <= 1) System.out.println(str);
String mid = str.substring(1, str.length()-1);
System.out.println("mid: "+mid);
System.out.println("last: "+str.charAt(str.length()-1));
// last + mid + first
System.out.println(str.charAt(str.length()-1) + mid + str.charAt(0));
}
}
公共类MyClass{
公共静态void main(字符串参数[]){
字符串str=“AB”;
如果(substring()
的参数(str.length()包含/排除),那么当索引相同时,substring()
将返回一个空字符串。对于长度为2的字符串,这意味着中间值为空
下面是以“AB”作为输入的代码演练
public String frontBack(String str) { // str = "AB"
// str.length() = 2, so continue
if (str.length() <= 1) return str;
// str.length()-1 = 1, so str.substring(1,1) which is empty string.
// mid = "";
String mid = str.substring(1, str.length()-1);
// last + mid + first
// str.charAt(str.length()-1) = "B"
// str.charAt(0) = "A"
// "B" + "" + "A" = "BA"
return str.charAt(str.length()-1) + mid + str.charAt(0);
// returns "BA"
}
publicstringfrontback(stringstr){//str=“AB”
//str.length()=2,继续吗
if(str.length()如果您认为索引之间的字母是,那么使用substring
方法更容易,如下所示为“AB”
而子字符串(a,b)
将返回位于索引a
和b
之间的字符
因此,当我们执行如下代码时:
- 子字符串(0,2)
我们得到完整的“AB”
“AB”。子字符串(0,1)
我们得到“A”
当我们执行如下代码时,让您感到困惑的是:“AB”。子字符串(1,1)
或(0,0)
或(2,2)
当我们对开始索引和结束索引使用相同的值时,子字符串的结果将是空字符串”
,因为这些索引之间没有字符
让我们回到你的例子。
当我们执行
String mid = str.substring(1, str.length()-1);
然后,它与执行子字符串(1,2-1)
=>子字符串(1,1)
相同,这意味着mid
将保存空字符串“”
现在当我们打电话的时候
return str.charAt(str.length()-1) + mid + str.charAt(0);
它将被评估为
return 'B' + "" + 'A';
这意味着我们最终会
return "BA";
我建议安装Eclipse或其他IDE并在调试中运行该示例。这是学习JAVA的最佳方法之一。从您的示例中,我可以告诉您以下几点:
Mid将为null,因为正在从位置1到1生成子字符串=>长度=0
对于str=“AB”
调试捕获:
如果子字符串是从1到2,那么它将显示字母B:
因此,您将只看到str.charAt(str.length()-1)+str.charAt(0)的结果
这是B和A。公共静态字符串前向(字符串str){
public static String frontBack(String str) {
if (str.length() < 2)
return str;
char first = str.charAt(0);
char last = str.charAt(str.length() - 1);
if (str.length() == 2)
return Character.toString(last) + first;
return last + str.substring(1, str.length() - 1) + first;
}
如果(str.length()<2)
返回str;
char first=str.charAt(0);
char last=str.charAt(str.length()-1);
如果(str.length()==2)
返回字符.toString(last)+first;
返回last+str.substring(1,str.length()-1)+first;
}
您期望得到什么?我建议添加System.out.println()
语句,看看这里发生了什么。将return语句的各个部分分配给单独的变量将有助于您了解每个部分是什么。mid=substring(1,1)=>substring(1,0)。因为0小于1,所以它不会返回任何内容
public static String frontBack(String str) {
if (str.length() < 2)
return str;
char first = str.charAt(0);
char last = str.charAt(str.length() - 1);
if (str.length() == 2)
return Character.toString(last) + first;
return last + str.substring(1, str.length() - 1) + first;
}