簡體   English   中英

反轉字符串數組中每個單詞的Java方法

[英]Java method to reverse every word in an array of strings

我正在嘗試創建一個方法,該方法將采用一個字符串數組並以相反的順序返回一個包含所有單詞的數組,但我的代碼不起作用。

當我運行它時,我得到“[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;
}

嘗試使用 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 並且它具有反向方法。 並且在實際需要之前使用 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;
}

當我運行您的代碼時,我沒有收到與您發布的相同的錯誤,但我確實注意到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]
 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);
    }

下面的代碼在幫助 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;
}

}

好吧,要以相反的順序返回一個包含所有單詞的數組,請嘗試下面的代碼,

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 中反向字符串數組的更多示例,請參閱資源。

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 的 reverse 方法

爪哇 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM