【问题标题】:Java method to reverse every word in an array of stringsJava方法来反转字符串数组中的每个单词
【发布时间】:2014-12-12 04:03:21
【问题描述】:

我正在尝试创建一个方法,该方法将接受一个字符串数组并返回一个包含所有单词以相反顺序排列的数组,但我的代码无法正常工作。

当我运行它时,我得到“[Ljava.lang.String;@74122d9c”

测试用例:String[]words={"Monday","Tuesday","Wednesday"}; -->{"yadnoM","yadsueT","yadsendeW"};

public String[] reverseString(String[] words)
{
    String[] t=new String[words.length];

    for(int i=0;i<words.length;i++)
    {
        for(int j=words[i].length()-1;j>=0;j--)
        {
            t[i]+=words[i].substring(j,j+1);
        }
    }
    return t;
}

【问题讨论】:

  • 你的输出是什么?你得到什么样的错误信息?
  • 您是否尝试过使用 for 循环遍历数组并使用字符串生成器 str.reverse() 方法?这应该工作

标签: java arrays string reverse


【解决方案1】:

您可以将您的字符串转换为 StringBuilder 并且它具有反向方法。在有实际需要之前,使用 foreach 而不是 for 总是更好。

public String[] reverseString(String[] words) {
    String[] t = new String[words.length];
    for (String wordTemp : words) {
      StringBuilder sb = new StringBuilder(wordTemp);
      t[i] = sb.reverse().toString();   
    }
    return t;
}

替代方法:-

public  String[]  reverseString(String[] words)
{
    String[] t=new String[words.length];

    for(int i=0;i<words.length;i++)
    {   
        //added for setting elemennt as emptyString instead of null
        t[i] = "";
        for(int j=words[i].length()-1;j>=0;j--)
        {
            t[i]+=words[i].substring(j,j+1);
        }
    }

    //using loop
    for(int i=0;i<words.length;i++)
    {
         System.out.println(t[i]);
    }
    //using Arrays Method
    System.out.println(Arrays.toString(t));
    return t;
}

【讨论】:

  • 我们班上没学过StringBuilder,我觉得老师不会让我用的
  • 你可以用任何一种方式来打印数组,数组就是我们用的,不知道你的老师会不会让你用。
【解决方案2】:

尝试使用 StringBuilder.reverse

public String[] reverseString(String[] words) {
        String[] t = new String[words.length];
        for (int i = 0; i < words.length; i++) {
            t[i]= new StringBuilder(words[i]).reverse().toString();
        }
        return t;
    }

更新

您得到When I run it i get "[Ljava.lang.String;@74122d9c" 的事实是因为您将整个字符串数组打印为一个[Ljava.lang.String 表示字符串数组。您将需要遍历数组以逐个打印出字符串

【讨论】:

  • 我们班上没学过StringBuilder,我觉得老师不会让我用的
  • 为什么不呢 - 它在 java.lang 包中。
  • @ScaryWombat 为什么一个人经常上课?学东西对吗?所以这个赋值的目的不是要反转一个字符串,而是要了解如何做呢?
  • @Emz 是的,我知道这可能是一个教训,另一个可能是学习字符串是不可变的。 - 查看我的更新
  • 他返回一个新字符串的原因是什么?向后迭代,将值复制到新的,返回。瞧。
【解决方案3】:

当我运行您的代码时,我没有收到您发布的相同错误,但我注意到null 位于每个反转单词的末尾。

nullyadnoM
nullyadseuT
nullyadsendeW

这是因为当你创建一个新的字符串数组时,它的所有值都默认为 null:

String[] t = new String[words.length];

修复它的最简单方法是在开始添加之前将其值设置为空字符串:

public static String[] reverseString(String[] words)
{
    String[] text = new String[words.length];

    for (int i = 0; i < words.length; i++)
    {
        text[i] = "";
        for (int j = words[i].length() - 1; j >= 0; j--)
            text[i] += words[i].charAt(j);
    }
    return text;
}

我已经测试了这段代码,它对我来说非常好。

输出数组,而不是使用

System.out.println(words);

使用以下内容:

System.out.println(Arrays.toString(words));

这将为您提供输出:

[yadnoM, yadseuT, yadsendeW]

【讨论】:

    【解决方案4】:
     public static void main(String[] args) {
            String[] words = { "Monday", "Tuesday", "Wednesday" };
            for (int i = 0 ; i < words.length ; i++) {
                words[i] = Reverse(words[i]);
            }
            for (int i = 0 ; i < words.length ; i++) {
                System.out.println(words[i]);
            }
    
        }
    
        private static String Reverse(String str) {
            StringBuilder result = new StringBuilder();
            StringTokenizer st = new StringTokenizer(str, "");
            while (st.hasMoreTokens()) {
                StringBuilder thisToken = new StringBuilder(st.nextToken());
                result.append(thisToken.reverse() + " ");
            }
            return result.toString();
        }
    

    输出

    yadnoM 
    yadseuT 
    yadsendeW 
    

    你也可以使用org.apache.commons.lang3.StringUtils;,只是为了减少你的工作量/缩短代码

    private static String Reverse(String str) {
            return StringUtils.reverse(str);
        }
    

    【讨论】:

      【解决方案5】:

      下面的代码使用帮助 Stringbuilder 反向功能正常工作。

      公共类示例{

      /**
       * @param args
       */
      public static void main(String[] args) {
          // TODO Auto-generated method stub
          String[] irreverseStr = {"Monday","Tuesday","Wendesday","Thursday","Friday","Saturday","Sunday"};           
          String[] reverseStr = new Example().getReverseArray(irreverseStr);
      
          for(int j = 0; j < reverseStr.length; j++){
              System.out.println(reverseStr[j]);
          }           
      }
      
      public String[] getReverseArray(String[] str){      
          String [] reversestr = new String[str.length];      
          for(int i=0;i<reversestr.length;i++){
              reversestr[i] = new StringBuilder(str[i]).reverse().toString();
          }       
          return reversestr;
      }
      

      }

      【讨论】:

        【解决方案6】:

        好吧,要返回一个包含所有单词的数组以相反的顺序尝试下面的代码,

        import java.util.Arrays;
        
        public class ArrayUtilsReverse 
        {
           public static void main(String[] args) 
           {
              String strArray[] = { "Monday","Tuesday","Wednesday" };
              System.out.println("Print string array in reverse order java : " + Arrays.toString(strArray));
        
              for(int a = 0; a < strArray.length / 2; a++)
              {
                 String str = strArray[a];
                 strArray[a] = strArray[strArray.length - a - 1];
                 strArray[strArray.length - a - 1] = str; 
              }
        
              System.out.println("Reversed array : ");
              for(int a = 0; a < strArray.length; a++)
              {
                 System.out.println(strArray[a]);
              }
           }
        }
        

        输出:

        Print string array in reverse order java : [Monday, Tuesday, Wednesday]
        Reversed array : 
        Wednesday
        Tuesday
        Monday
        

        有关 java 中反向字符串数组的更多示例,请参阅 this 资源。

        【讨论】:

          【解决方案7】:
          public static String[] reverseString(String[] words) {
              String[] t = new String[words.length];
              for (int i = 0; i < words.length; i++) {
                  t[i]=new StringBuffer(words[i]).reverse().toString();
          
              }
              return t;
          }
          

          试试StringBuffer的逆向方法

          【讨论】:

            【解决方案8】:

            java 8+

            public String[] reverseStringArray(String[] test){
                   String[] result = Arrays.stream(test).map(item -> {
                        List<String> list = Arrays.asList(item.split(""));
                        Collections.reverse(list);
                        return String.join("", list);
                    }).collect(Collectors.toList()).toArray(new String[0]);
                    return result;
            }
            

            【讨论】:

              猜你喜欢
              • 2021-04-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-06-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-11-13
              相关资源
              最近更新 更多