gpt4 book ai didi

java - 使用递归在 2 个索引之间的子字符串

转载 作者:行者123 更新时间:2023-11-29 07:30:47 24 4
gpt4 key购买 nike

我开始学习 Java,目前正在研究递归。

我想尝试制作一个子字符串方法,该方法将从两边进行子字符串化 1 个字符,直到我们得到所需的字符串。

我设法完成了第一部分,但我在弄清楚如何从后面提取子字符串时遇到了问题。

nm 应该是我们要在其间进行子字符串(包括)的索引。

在此示例中,方法的结果应为“bstri”

这是我的代码:

public static void main(String[] args) {
String s = "substringme";

System.out.println(rec(s,2,6));
}

public static String rec(String s, int n, int m) {
if(n == 0 /* && missing 2nd part of condition */){
return s;
} else {
if(n>0){
s = s.substring(1);
n--;
}
if(/* missing condition */){
s= s.substring(0, s.length()-1);
}
return rec(s,n,m);
}
}

如果能得到任何帮助,我将不胜感激。

最佳答案

因此修复递归方法相当容易。我们只是做与您对 n 所做的完全相同的事情:

public static String rec(String s, int n, int m) {        
if (n == 0 && m == 0) {
return s;
}
else {
if(n > 0) {
s = s.substring(1);
n--;
}
if(m > 0) {
s = s.substring(0, s.length()-1);
m--;
}
return rec(s,n,m);
}
}

现在的问题是,作为输入给出的 m 的值是从字符串的开头开始测量的,如果它是从字符串的末尾开始测量的,对我们来说会更方便。

我们可以引入一个新方法来为我们做这件事,它作为我们递归方法的入口点:

public static String substr(String s, int n, int m) {
final int newM = s.length() - m - 1; //-1 to be inclusive of the char
return rec(s, n, newM);
}

然后您可以更改主方法以调用 substr():

public static void main(String[] args) {
String s = "substringme";

System.out.println(substr(s,2,6));
}

当我使用递归方法时,我经常发现自己在编写这些“入口点”方法。如果您正确执行此操作,substr 将是您面向公众的方法,而 rec 将是私有(private)的。

关于java - 使用递归在 2 个索引之间的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43124709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com