Java 用于反转字符串中的单词的程序
我已经写了一个程序来反转字符串中的单词。 如果i/p为“狗在追” 那么o/p应该是“追逐是狗”Java 用于反转字符串中的单词的程序,java,recursion,Java,Recursion,我已经写了一个程序来反转字符串中的单词。 如果i/p为“狗在追” 那么o/p应该是“追逐是狗” 但是我不知道如何使用递归编写这个程序。当我尝试在stackoverflow中搜索时,我可以找到一个字符串;但不能在字符串中反转单词 这是一个示例程序,它将递归地执行您想要的操作: public class ReverseWords { public static void main(String args[]) { String s = "This is a test";
但是我不知道如何使用递归编写这个程序。当我尝试在stackoverflow中搜索时,我可以找到一个字符串;但不能在字符串中反转单词 这是一个示例程序,它将递归地执行您想要的操作:
public class ReverseWords {
public static void main(String args[]) {
String s = "This is a test";
reverse(s);
}
private static void reverse(String s) {
if(s == null) return;
String words[] = s.split(" ", 2);
if (words.length < 2) reverse(null);
else reverse(words[1]);
System.out.print(words[0] + " ");
}
}
公共类反向记录{
公共静态void main(字符串参数[]){
String s=“这是一个测试”;
反面;
}
专用静态无效反转(字符串s){
如果(s==null)返回;
字符串[]=s.split(“,2);
如果(字长<2)相反(空);
反之(词语[1]);
系统输出打印(字[0]+“”);
}
}
这是一个示例程序,它将递归地执行您想要的操作:
public class ReverseWords {
public static void main(String args[]) {
String s = "This is a test";
reverse(s);
}
private static void reverse(String s) {
if(s == null) return;
String words[] = s.split(" ", 2);
if (words.length < 2) reverse(null);
else reverse(words[1]);
System.out.print(words[0] + " ");
}
}
公共类反向记录{
公共静态void main(字符串参数[]){
String s=“这是一个测试”;
反面;
}
专用静态无效反转(字符串s){
如果(s==null)返回;
字符串[]=s.split(“,2);
如果(字长<2)相反(空);
反之(词语[1]);
系统输出打印(字[0]+“”);
}
}
开始时可能有点困难,但请尝试执行以下操作:
- 尽可能地简化问题,让自己找到不太复杂的问题来解决。(例如,在这里,您可以使用一个包含两个单词的句子)
- 从写在纸上开始,用最简单的语言帮助你解决问题
- 开始编写代码,不要忘记对递归的转义
解决方案
publicstaticvoidmain(字符串[]args){
字符串s=reverseSentence(“这句话将被颠倒-我发誓”).split(“”);
系统输出打印项次;
}
公共静态字符串反转内容(字符串[]句){
如果(句子长度在开始时可能看起来有点难,但请尝试执行以下操作:
- 尽可能地简化问题,以发现自己有较不复杂的情况需要解决。(例如,在这里,你可以使用一个包含两个单词的句子)
- 从写在纸上开始,用最简单的语言帮助你解决问题
- 开始编写代码,不要忘记对递归的转义
解决方案
publicstaticvoidmain(字符串[]args){
字符串s=reverseSentence(“这句话将被颠倒-我发誓”).split(“”);
系统输出打印项次;
}
公共静态字符串反转内容(字符串[]句){
if(句子长度递归方法,使用与相同的逻辑,不使用split()
:
逻辑是:
取第一个字符/单词
如果这是最后一个字符/单词,请将其返回
使用剩余文本执行递归调用(不包括单词分隔空间)
追加空格(如果执行word)
追加步骤1中的第一个字符/字
返回结果
如您所见,当应用于反转文本(字符)而不是单词时,它非常相似:
私有静态字符串反向文本(字符串文本){
返回(text.length()递归方法,使用与相同的逻辑,不使用split()
:
逻辑是:
取第一个字符/单词
如果这是最后一个字符/单词,请将其返回
使用剩余文本执行递归调用(不包括单词分隔空间)
追加空格(如果执行word)
追加步骤1中的第一个字符/字
返回结果
如您所见,当应用于反转文本(字符)而不是单词时,它非常相似:
私有静态字符串反向文本(字符串文本){
return(text.length()您可以参考以下代码
class ReverseString {
public static void main(String args[]) {
String myString = "The dog is chasing";
reverse(myString);
}
public static String reverse(String myString) {
int space = myString.indexOf(" ");
if (space != -1) {
reverse(myString.substring(space + 1, myString.length()));
}
if (space == -1) {
System.out.println(myString.substring(0, myString.length()));
} else {
System.out.println(myString.substring(0, space));
}
return myString;
}
}
您可以参考以下代码
class ReverseString {
public static void main(String args[]) {
String myString = "The dog is chasing";
reverse(myString);
}
public static String reverse(String myString) {
int space = myString.indexOf(" ");
if (space != -1) {
reverse(myString.substring(space + 1, myString.length()));
}
if (space == -1) {
System.out.println(myString.substring(0, myString.length()));
} else {
System.out.println(myString.substring(0, space));
}
return myString;
}
}
首先从一般的角度来考虑,而不是Java。在任何给定的递归调用中,您都有一个当前单词和句子的其余部分。您会怎么做?您会显示当前单词,然后执行句子的其余部分吗?或者其他什么?当然,当您用完单词时,您需要注意情况(或者说是最后一句话).可能是重复的否。它不是重复的。在那个问题中,他们正在反转字符串。例如:您好olleH@SethuramanSrinivasan这是同样的事情,除了附加第一个单词,而不是第一个字符,并带有空格分隔符。@Andreas如何对数组进行子串?只需先从一般意义上考虑,而不是专门考虑Java。在任何给定的递归调用中,您都有一个当前单词和句子的其余部分。您会怎么做?您会显示当前单词,然后执行句子的其余部分吗?还是做其他事情?当然,当您用完单词(或在最后一个单词上)时,您需要注意情况.可能是重复的否。它不是重复的。在那个问题中,他们正在反转字符串。例如:您好olleH@SethuramanSrinivasan这是相同的事情,除了附加第一个单词,而不是第一个字符,并带有空格分隔符。@Andreas如何对数组进行子串?在数组克隆过程中会产生大量开销,并且需要调用方准备通过调用split()
来准备数据。在数组克隆过程中会产生大量开销,并且需要调用方通过调用split()
来准备数据。
private static String reverseText(String text) {
return (text.length() <= 1 ? text : reverseText(text.substring(1)) + text.charAt(0));
}
private static String reverseWords(String text) {
if (text == null) {
return null;
}
int idx = text.indexOf(' ');
if (idx == -1) {
return text;
}
return reverseWords(text.substring(idx + 1)) + ' ' + text.substring(0, idx);
}
private static String reverseText(String text) {
if (text == null || text.length() <= 1) {
return text;
}
return reverseText(text.substring(1)) + text.charAt(0);
}
class ReverseString {
public static void main(String args[]) {
String myString = "The dog is chasing";
reverse(myString);
}
public static String reverse(String myString) {
int space = myString.indexOf(" ");
if (space != -1) {
reverse(myString.substring(space + 1, myString.length()));
}
if (space == -1) {
System.out.println(myString.substring(0, myString.length()));
} else {
System.out.println(myString.substring(0, space));
}
return myString;
}
}