[英]Recursion for printing out words in sentence backwards
我正在研究一種可以將句子中的單詞向后打印的方法。 我非常接近解決方案,但遇到了小麻煩。
這是我的代碼:
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));
}
}
現在的問題是我的測試輸出:
String test = "This is a test.";
System.out.println(reverseString(test));
把這個還給我:
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));
用這種方法,您可以根據空白有選擇地創建子字符串。 用於輸入This is a test.
下面的方法將給出退貨test. a is This
test. a is This
。 這里的想法是,如果您有領先的空間,那么您實際上將轉換為結尾的空間。
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));
}
}
使用您的代碼,您只需要在要反轉的任何字符串之前添加一個額外的空間,例如此代碼
reverseString(" " + str)
首次執行該方法時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.