java - 如何从数组内部的字符串创建回文
问题描述
我应该将数组 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);
}
推荐阅读
- json - 将成员添加到 JSON powershell
- google-apps-script - 提交时的 Google 表单将空白值替换为零
- c# - 使用 ITextSharp 将 PDF 导出到目录时文件损坏
- python-3.7 - 如何模拟上下文管理器并替换其一个或多个方法
- java - 从服务器端 Java 代码调用方法到 IOS APP 并接收其同步响应
- azure - Azure CLI 或 PowerShell 命令在 keyvault 中创建新版本的证书
- php - 如何限制在 laravel 中未获批准的供应商的路线?
- sql - Oracle中索引B树的访问顺序是什么?
- sql - 分桶数据,如果桶大小大于 1,则将值设置为 1,否则为 0
- c++ - C++ 管理一系列资源附件 RAII 风格