java - 如何使用递归循环从 char[] 数组返回字符串。(java)

标签 java string recursion char

我不擅长递归...

我需要仅使用递归将 char[] 数组转换为字符串 - 不使用 for()while() 等等循环。例如,如果我有一个 char 数组:

a[0]='H', a[1]='e', a[2]='l',a[3]= 'l',a[4]= 'o'

它返回H e l l o

我做错了什么?

 public String toFormattedString(char[] a)
 {
      int temp =a.length;
      if (a == null)
       return "null";
      if (a.length == 0)
       return "0";
       if( a.length == 1 )
           else  if( a[0] == a[a.length] )
         return toFormattedString (a[a.length -1])+a[a.length];

最佳答案

在递归中,方法使用原始调用的修改数据调用自身。这样做直到达到某种基本情况,在这种情况下不再可能修改数据。

在您的情况下,基本情况是 char 数组仅包含一个元素。这个字符将是字符串。否则,它是第一个元素,其余元素附加在递归调用中。

字符串"Hello"'H'toFormattedString({'e','l','l','o'})附加。因此,如果您的 char 数组仅包含一个元素 (length==1)只需将此元素作为字符串值返回即可。

否则,获取第一个元素并递归到没有第一个元素的剩余 char 数组。递归直到只剩下一个元素。

    public static String toFormattedString(char[] a)
{
     if (a.length==1) return String.valueOf(a[0]);
     else     
     return a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length)) ;

}

你甚至可以将方法体放在一个不可读的行中(不推荐,我提到它只是为了好玩):

return((a.length==1)?String.valueOf(a[0]):a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length)));

更新: A switch - 语句在本例中给出了可读的代码:

public static String toFormattedString(char[] a)
 {
    switch (a.length)
      {case 0 : return "";    
       case 1 : return String.valueOf(a[0]);
       default: return a[0]+toFormattedString(Arrays.copyOfRange(a,1,a.length));
      }
}

用法:

 public static void main (String[] args) throws java.lang.Exception
{  
    System.out.println(toFormattedString("Hello".toCharArray()));
}

关于java - 如何使用递归循环从 char[] 数组返回字符串。(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4633297/

相关文章:

Java 流 : get latest version of user records

python - 如何在Python中除最后一个字符之外的所有出现的字符上分割字符串?

c# - 如何使用 C# 和正则表达式解析字符串?

string - 从具有重复结构的字符串中提取值

recursion - 如何在进入无效错误之前中断递归调用

javascript - 使用递归转换 json 数据

java - Mockito - 如何验证从未调用过模拟

Java 8 UTF-16 不是默认字符集,而是 UTF-8

python - 递归:如何避免 Python set changed set 在迭代 RuntimeError 期间

java - JUNG:哪些库是必需的依赖项?