在Java中检查单词是否为回文时,如何正确使用charAt()



对于"夫人"madama";代码正在工作,但对于较长的字符串,如";babzsákpotelben sok a bab"返回错误答案。

Scanner sc = new Scanner(System.in);
String A = sc.nextLine();
String myString = A.toLowerCase().replaceAll("\s", "");
int i = 0;
int j = myString.length() - 1;
while (i < j) {
if (myString.charAt(i) != myString.charAt(j)) {
System.out.println("No");
break;
}
i++;
j--;
System.out.println("Yes");
break;
}
}
}

当前代码中的问题是您的循环只执行一次,因为在递增i和递减j之后,您将打印"是";并脱离循环。

您应该声明一个用值true初始化的布尔变量。在循环内部,在任何迭代中,如果if条件的求值结果为true,则将该布尔变量的值设置为false,并脱离循环。

循环结束后,检查布尔变量的值是否仍然是true。若它是,那个么字符串就是回文,否则就不是。

int i = 0;
int j = myString.length() - 1;
boolean isPalindrome = true;
while (i < j) {
if (myString.charAt(i) != myString.charAt(j)) {
isPalindrome = false;
break;
}
i++;
j--;
}

if (isPalindrome) {
System.out.println("Yes");
} else {
System.out.println("No");
}

**您可以使用for循环代替while循环,也可以使用StringBuilder代替字符串。情况如下:

**

public class Palindrome {
public static void main(String[] args) {
//Creating an instance of scanner class
Scanner scan = new Scanner(System.in);
//Creating an instance of StringBuilder class
StringBuilder str = new StringBuilder();
//Asking for input
System.out.println("Please Enter the Word: ");
//Getting Input
String word = scan.next();
/*
*
* Palindrome Check
*
*/
for (int i = word.length() - 1; i >= 0; i--) {
str.append(word.charAt(i));
}
if (word.equalsIgnoreCase(String.valueOf(str))) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}

}

最新更新