在 Java 中打印长字符串回文:错误可能在于删除空格和标点符号
Print long string palindrome in Java: error may be in removing white spaces & punctuation
正在尝试测试 "a man, a plan, a canal Panama" 等多词回文。
我想创建一个字符串来保存输入字符串的小写版本,然后创建一个结果字符串来保存字母 - 以检查回文。然后循环遍历小写字符串的每个字符,判断该字符是否为字母,如果该字符是字母则将其添加到结果字符串中。
这是我的代码:
import java.util.Scanner;
public class PalindromeCheck {
private static char resultString;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a String: ");
String s = input.nextLine();
s = s.toLowerCase();
String resultString = " ";
for (int i = 0; i < s.length(); i++) {
if (Character.isLetter(s.charAt(i)))
resultString += s.charAt(i);
}
int low = 0;
int high = s.length() - 1;
boolean isPalindrome = true;
if (high >= 0) {
while (low < high) {
if (s.charAt(low) != s.charAt(high)) {
isPalindrome = false;
break;
}
low++;
high--;
}
}
else {
isPalindrome = false;
}
if (isPalindrome)
System.out.println(s + " is a palindrome. ");
else
System.out.println(s + " is not a palindrome. ");
}
}
当我 运行 我的代码没有删除空格和标点符号时,所以我觉得我在我的第一个 for 循环中搞砸了一些东西 - 但我似乎仍然无法理解出来。输入 "a man, a plan, a canal Panama" 结果为 "a man, a plan, a canal Panama is not a palindrome."
两件事:
您正在测试尚未删除标点符号的 s
,而 resultString
已删除标点符号。添加
s = resultString;
您将 resultString
初始化为 space 字符 " "
,这会干扰回文测试。将其初始化为空字符串 ""
。
正在尝试测试 "a man, a plan, a canal Panama" 等多词回文。 我想创建一个字符串来保存输入字符串的小写版本,然后创建一个结果字符串来保存字母 - 以检查回文。然后循环遍历小写字符串的每个字符,判断该字符是否为字母,如果该字符是字母则将其添加到结果字符串中。
这是我的代码:
import java.util.Scanner;
public class PalindromeCheck {
private static char resultString;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter a String: ");
String s = input.nextLine();
s = s.toLowerCase();
String resultString = " ";
for (int i = 0; i < s.length(); i++) {
if (Character.isLetter(s.charAt(i)))
resultString += s.charAt(i);
}
int low = 0;
int high = s.length() - 1;
boolean isPalindrome = true;
if (high >= 0) {
while (low < high) {
if (s.charAt(low) != s.charAt(high)) {
isPalindrome = false;
break;
}
low++;
high--;
}
}
else {
isPalindrome = false;
}
if (isPalindrome)
System.out.println(s + " is a palindrome. ");
else
System.out.println(s + " is not a palindrome. ");
}
}
当我 运行 我的代码没有删除空格和标点符号时,所以我觉得我在我的第一个 for 循环中搞砸了一些东西 - 但我似乎仍然无法理解出来。输入 "a man, a plan, a canal Panama" 结果为 "a man, a plan, a canal Panama is not a palindrome."
两件事:
您正在测试尚未删除标点符号的 s
,而 resultString
已删除标点符号。添加
s = resultString;
您将 resultString
初始化为 space 字符 " "
,这会干扰回文测试。将其初始化为空字符串 ""
。