如何在数组内部的字符串上创建一个回文



我应该将数组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作为空字符串或空字符串,但我不知道如何将其作为返回语句。

如能帮助实现任务目的,将不胜感激。

您的代码可以更新为此。

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)));
}
}

这是一个更简单的方法:

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);
}

相关内容

最新更新