Java Pallindrome字符串替换为*字符
输入一个包含一些回文子字符串的字符串。找出回文子串(如果存在)的位置,并将其替换为*。例如,如果输入字符串是“bob有一个雷达平面”,那么它应该转换为“**有一个******平面” 我的代码如下Java Pallindrome字符串替换为*字符,java,string,substring,Java,String,Substring,输入一个包含一些回文子字符串的字符串。找出回文子串(如果存在)的位置,并将其替换为*。例如,如果输入字符串是“bob有一个雷达平面”,那么它应该转换为“**有一个******平面” 我的代码如下 import java.util.Scanner; public class Pallindrome_String { public static void main(String[] args) { // TODO Auto-generated method stub
import java.util.Scanner;
public class Pallindrome_String {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String sen;
System.out.println("Enter the String: ");
sen = in.nextLine();
pallindrome(sen);
in.close();
}
public static void pallindrome(String s) {
int len = s.length();
for (int i = 0; i < len; i++) {
String res = "";
if (s.charAt(i) == ' ') {
res = s.substring(0, i);
String rev = "";
for (int j = res.length() - 1; j >= 0; j--) {
rev = rev + res.charAt(i);
}
if (rev.equals(res)) {
rev = "*";
System.out.print(rev + " ");
} else {
System.out.print(res + " ");
}
}
}
}
}
有一种更简单、更有效的方法可以在Java中查找回文。我将解释实现它的步骤 首先,在获得输入“sen”后,可以使用String类的split方法来分隔每个单词
sen = in.nextLine();
String[] splitted = s.split(" "); // seperates the string when there is a whitespace and stores the resulting words in an array
将单词放入数组后,可以检查每个单词是否为回文。为此,您可以前后阅读单词,并比较结果
如果找到回文,将其索引位置存储在“拆分”数组中。完成“拆分”数组中的所有单词后,可以根据单词的长度打印出适当数量的* 拆分将在源字符串中释放双空格和标点符号,并在内存中生成大量无用对象。这是更正确的解决方案。伊姆霍
public static void main(String[] args) {
String s = "Bob! Do you have a radar plane?";
StringBuilder sb = new StringBuilder(s);
Matcher m = Pattern.compile("[a-zA-Z]+").matcher(s);
while (m.find()) {
String word = m.group();
if (word.length() == 0)
continue;
String reversed = new StringBuffer(word).reverse().toString();
if (word.equalsIgnoreCase(reversed)) {
StringBuilder replacement = new StringBuilder();
for (int i = 0; i < word.length(); i++)
replacement.append('*');
sb.replace(m.start(), m.end(), replacement.toString());
}
}
System.out.println(sb);
}
问题是什么?问题是字符串的索引超出了范围。我的问题解决了,但如果你能改进我的代码,请这样做。否则没问题。改进?它可以工作,但您需要更好的代码吗?或者它仍然不起作用?您可以在Java 11或更高版本中使用String.repeatint count,或者在旧版本的Java中使用apache commons StringUtils