【问题标题】:Java using substring() to reverse StringJava 使用 substring() 来反转字符串
【发布时间】:2018-09-12 02:21:21
【问题描述】:

传递给此方法的字符串如何被反转?如果您传递“ABCD”,则字符串变为“DCBA”,但我在想 reverse(str.substring(1)) 会调用它自己,直到它返回“D”,它将与 str.substring(0,1) 连接起来为D,返回的字符串为“DD”。JAVA编程语言。

private static String reverse(String str) {
    if (str.length() <= 1) {
        return str;
    }
    return reverse(str.substring(1)) + str.substring(0, 1);
}

【问题讨论】:

  • 嗨,欢迎来到 SO。你知道递归是如何工作的吗? reverse(str.substring(1)) 将调用它自己,直到它返回“D”,它将与 str.substring(0,1) 连接,即 D,返回的字符串为“DD” - 没有。你尝试调试了吗?

标签: java


【解决方案1】:

你最好的办法是在纸上完成它和/或在你的 IDE 中内置的调试器中逐句逐句地完成它。

  • reverse("ABCD") 返回reverse("BCD") + "A"。这是递归。该调用尚未返回,因为它需要reverse("BCD") 的结果才能将"A" 添加到它并返回。
    • reverse("BCD") 返回 reverse("CD") + "B",等待 reverse("CD") 返回
      • reverse("CD") 返回 reverse("D") + "C",等待 reverse("D") 返回
        • reverse("D") 返回"D"
      • reverse("D") + "C" 的结果是"DC",所以现在reverse("CD") 可以返回"DC"
    • reverse("CD") + "B" 的结果是"DCB",所以现在reverse("BCD") 可以返回"DCB"
  • reverse("BCD") + "A" 的结果是"DCBA",所以现在reverse("ABCD") 可以返回"DCBA"

【讨论】:

  • 感谢您的快速回复。
【解决方案2】:

您也可以使用以下步骤来解决您的问题:

String reversed = new StringBuilder(str).reverse().toString();

另外,根据线程安全的要求,你可以使用 StringBuffer 或 StringBuilder

【讨论】:

    猜你喜欢
    • 2020-02-22
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    相关资源
    最近更新 更多