Java 用于向后打印句子中单词的递归
我正在研究一种方法,可以把一个句子的单词倒排出来。我非常接近解决方案,但遇到了一个小问题 这是我的密码:Java 用于向后打印句子中单词的递归,java,recursion,Java,Recursion,我正在研究一种方法,可以把一个句子的单词倒排出来。我非常接近解决方案,但遇到了一个小问题 这是我的密码: public static String reverseString(String str) { if (str.equals("")) return ""; else { int i = str.length() - 1; while (!Character.isWhitespa
public static String reverseString(String str) {
if (str.equals(""))
return "";
else {
int i = str.length() - 1;
while (!Character.isWhitespace(str.charAt(i))) {
if (i - 1 < 0)
break;
i--;
}
return str.substring(i,str.length()) + reverseString(str.substring(0,i));
}
}
正在把这个还给我:
test. a isThis
现在,当我尝试增加正在返回的子字符串的索引并手动添加空格时,它会切断“This”中的“T”。也就是说,如果我决定按如下方式返回:
return str.substring(i+1,str.length()) + " " + reverseString(str.substring(0,i));
然后我回来
test. a is his
有人对我的实现有什么建议或建议吗?使用String.Split拆分句子,然后向后迭代生成的数组。用空格分开吗
test.split(" +");
split方法采用一个正则表达式,上面的意思是:在一个或多个连续空格处拆分
递归方法:
public String reverse(final String s) {
final int pos = s.indexOf(' ');
if (pos > -1) {
return reverse(s.substring(pos + 1).trim()) + " " + s.substring(0, pos).trim();
}
return s;
}
您可以将return语句更改为:
return str.substring(i, str.length()).trim() + " " + reverseString(str.substring(0, i));
使用代码时,只需在要反转的字符串前面添加额外的空格,例如使用此代码
reverseString(" " + str)
当您第一次执行该方法时。在这种方法中,您可以根据空格有选择地创建子字符串。对于输入
这是一个测试。
下面的方法将返回测试。a这是
。这里的想法是,若你们有一个前导空格,你们实际上会转换成尾随空格
public static String reverseString(String str) {
if (str.equals(""))
return "";
else {
int i = str.length() - 1;
while (!Character.isWhitespace(str.charAt(i))) {
if (i - 1 < 0)
break;
i--;
}
String substring;
if(Character.isWhitespace(str.charAt(i)))
{
substring= str.substring(i+1,str.length())+" ";
}
else
{
substring= str.substring(i,str.length());
}
return substring + reverseString(str.substring(0,i));
}
}
publicstaticstringreversestring(stringstr){
if(str.equals(“”)
返回“”;
否则{
int i=str.length()-1;
而(!Character.isWhitespace(str.charAt(i))){
if(i-1<0)
打破
我--;
}
字符串子串;
if(Character.isWhitespace(str.charAt(i)))
{
substring=str.substring(i+1,str.length())+“”;
}
其他的
{
substring=str.substring(i,str.length());
}
返回子字符串+反向字符串(str.substring(0,i));
}
}
我做了一个迭代方法。“我正试图找出一种递归方法”。@月亮:对不起,错过了。我编辑了我的答案。但那永远是真的,在这种情况下i
是临时递归str
中最后一个单词的长度,因此它总是小于str
的长度。你的建议将导致每个字母都被视为一个单独的单词(即,它将返回。t s e t a s i s h t
)是的,你是对的,我误解了我更新了答案的问题这将按原样颠倒句子,而不是颠倒句子中的单词<代码>原件:这是一个测试。反转:.t设置一个si sihT你让它工作了吗?
public static String reverseString(String str) {
if (str.equals(""))
return "";
else {
int i = str.length() - 1;
while (!Character.isWhitespace(str.charAt(i))) {
if (i - 1 < 0)
break;
i--;
}
String substring;
if(Character.isWhitespace(str.charAt(i)))
{
substring= str.substring(i+1,str.length())+" ";
}
else
{
substring= str.substring(i,str.length());
}
return substring + reverseString(str.substring(0,i));
}
}