簡體   English   中英

如何從數組內部的字符串創建回文

[英]How to create a palindrome off a string that is INSIDE of an array

我應該將數組arr的每個元素都更改為回文。

我嘗試過創建一個for循環來創建一個新的數組,並嘗試了另一個for循環來從該數組的元素中創建一個回文,但是顯然它並沒有真正起作用。

  public static String [] changeArrayToPalindrome(String [] arr){
  int length =arr.length;
  String[]newarray= new String[length];
  for(int i=0; i<length; i++){
     String a=arr[i];
     int n=a.length();
     if(a==null){
        System.out.println("null");
     }
     else if(a.equals("")){

      System.out.println("");
        }


     String newString="";
     for(int j=0; j<=n/2-1; j++){        

        newString+=a.charAt(j);
        newString+=a.charAt(n/2+j);

        newarray[j]=newString;
     }

  }
  return newarray;
   }   

測試員是

String [] array={"street", null, "break", "oha", "", "pit", null,"atOyotA"};
System.out.println(Arrays.toString(changeArrayToPalindrome(array)));

應該打印出來

  //[street, null, break, oha, , pit, null, atOyotA]
  //[strrts, null, brerb, oho, , pip, null, atOyOta]   

我知道我不應該將System.out.println放置為null或空字符串,但是我不知道如何將其作為return語句。

任何幫助實現任務目的的幫助將不勝感激。

這是一個更簡單的方法:

public static void main(String[] args) {
        String[] strings = {"abc", null, "abcdef"};
        List<String> collect = Arrays.stream(strings)
                .map(s -> s == null ? s : s.substring(0, (s.length() + 1) / 2) + reverseStringForPalin(s.substring(0, s.length() % 2 == 0 ? (s.length() + 1) / 2 : ((s.length() + 1) / 2) - 1)))
                .collect(Collectors.toList());
        System.out.println(collect);
    }

    private static String reverseStringForPalin(String s) {
        StringBuilder stringBuilder = new StringBuilder(s);
        return stringBuilder.reverse().toString();
    }

如果您不想使用StringBuilder

private static String reverseStringForPalin(String s) {
        String reversed = "";
        for (int i = s.length() - 1; i >= 0; i--) {
            reversed += s.charAt(i);
        }
        return reversed;
    }

更新

基本上, map要做的是獲取一個對象並將其轉換為另一個對象。 但是,如果你不想使用它,只需將轉換streams以傳統for

public static void main(String[] args) {
        String[] strings = {"abc", null, "abcdef"};

        String[] output = new String[strings.length];
        for (int i = 0; i < strings.length; ++i) {
            if (strings[i] == null) {
                output[i] = null;
            } else {
                final String s = strings[i];
                output[i] = s.substring(0, (s.length() + 1) / 2) + reverseStringForPalin(s.substring(0, s.length() % 2 == 0 ? (s.length() + 1) / 2 : ((s.length() + 1) / 2) - 1));
            }
        }

這是子字符串的代碼(直接來自Java):

public String substring(int beginIndex, int endIndex) {
        if (beginIndex < 0) {
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        if (endIndex > value.length) {
            throw new StringIndexOutOfBoundsException(endIndex);
        }
        int subLen = endIndex - beginIndex;
        if (subLen < 0) {
            throw new StringIndexOutOfBoundsException(subLen);
        }
        return ((beginIndex == 0) && (endIndex == value.length)) ? this
                : new String(value, beginIndex, subLen);
    }

您的代碼可以更新為此。

import java.util.Arrays;

public class Test {

      public static String [] changeArrayToPalindrome(String [] arr){
          int length =arr.length;
          String[]newarray= new String[length];
          for(int i=0; i<length; i++){
             String a=arr[i];

             if(a==null){
                newarray[i]=null;
             }
             else if(a.equals("")){
              newarray[i]="";
             } else {
                 int n=a.length();
                 String newString="";
                 if (n%2==0) {
                     //for even
                     newString=a.substring(0,n/2); 
                 } else {
                     newString=a.substring(0,n/2+1);
                 }


                 for(int j=n/2-1; j>=0; j--){        
                    newString+=a.charAt(j);

                 }
                 newarray[i]=newString;
             }

          }
          return newarray;
      }  

    public static void main(String[] args) {
        String [] array={"street", null, "break", "oha", "", "pit", null,"atOyotA"};
        System.out.println(Arrays.toString(changeArrayToPalindrome(array)));

    }

}

暫無
暫無

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

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