用于向后打印句子中的单词的递归

时间:2016-11-13 20:23:53

标签: java recursion

我正在努力获得一个向后打印句子单词的方法。我非常接近解决方案但是遇到了一个小问题。

这是我的代码:

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 

有没有人对我的实施有任何建议或指示?

4 个答案:

答案 0 :(得分:2)

使用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;
}

答案 1 :(得分:2)

您可以将return语句更改为:

Private Sub Worksheet_Change(ByVal Target As Range)
' Code to put the date of the latest update following a change in the corresponding cell in column F
Dim WorkRng As Range
Dim rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("F:F"), Target)
xOffsetColumn = -2 'The date is put 2 columns to the left of column F
If Not WorkRng Is Nothing Then
    Application.EnableEvents = False
    For Each rng In WorkRng
       If Not VBA.IsEmpty(rng.Value) Then
          rng.Offset(0, xOffsetColumn).Value = Now
          rng.Offset(0, xOffsetColumn).NumberFormat = "dd/mm/yyyy"
       Else
          rng.Offset(0, xOffsetColumn).ClearContents
       End If
   Next
   Application.EnableEvents = True
End If
End Sub

答案 2 :(得分:1)

在这种方法中,您可以根据空白有选择地创建子字符串。对于输入aes(x,y,group=g),方法将返回This is a test.。这里的想法是,如果你有一个领先的空间,你实际上将转换为尾随空格。

test. a is This

答案 3 :(得分:-1)

使用您的代码,您只需要在要反转的任何字符串前添加一个额外的空格,例如使用此代码

reverseString(" " + str)

首次执行方法时。