在 java 的回文程序中使用大写字母时出错
error on using uppercase in palindrome prog in java
package Assignments;
import java.util.Scanner;
public class Assignment1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int i=0,j=str.length()-1,count=0;
while(i!=j) {
if(str.charAt(i)!=str.charAt(j)) {
count++;
break;
}
i++;
j--;
}
if(count!=0) {
System.out.println("Not a Palindrome");
}
else {
System.out.println("Palindrome");
}
}
}
输入大写字母后显示错误。 "assa" 因为输入工作正常但 "Assa" 显示错误。
我知道这是某个地方的小错误,但我是 java 的新手。有人可以帮忙吗?
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
at java.base/java.lang.String.charAt(String.java:709)
at Assignments.Assignment1.main(Assignment1.java:12)
A
和a
不是同一个字符,字符串不匹配是正常的。
你可以做的是,在处理字符串以查看它是否是回文之前,将其转换为小写:
str = str.toLowerCase();
a
和 A
不是同一个字符。如果您不关心大小写,则可以在比较它们时将所有字符显式转换为小写(或大写):
while (i != j) {
if (Character.toLowerCase(str.charAt(i)) != Character.toLowerCase(str.charAt(j))) {
count++;
break;
}
i++;
j--;
}
编辑:
问题中更新的异常澄清了问题 - 它与 upper/lower 大小写差异无关,但与错误处理具有偶数个字符的字符串有关。要处理此问题,您可以使用 <
运算符而不是 !=
:
while (i < j) {
替换
if(str.charAt(i)!=str.charAt(j))
与
if(Character.toUpperCase(str.charAt(i))!=Character.toUpperCase(str.charAt(j)))
或者,
替换
if(str.charAt(i)!=str.charAt(j))
与
if(Character.toLowerCase(str.charAt(i))!=Character.toLowerCase(str.charAt(j)))
关键是比较相同大小写的字符
除此之外,您还需要
替换
while(i!=j)
与
while(i < j)
为了避免StringIndexOutOfBoundsException
.
package Assignments;
import java.util.Scanner;
public class Assignment1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int i=0,j=str.length()-1,count=0;
while(i!=j) {
if(str.charAt(i)!=str.charAt(j)) {
count++;
break;
}
i++;
j--;
}
if(count!=0) {
System.out.println("Not a Palindrome");
}
else {
System.out.println("Palindrome");
}
}
}
输入大写字母后显示错误。 "assa" 因为输入工作正常但 "Assa" 显示错误。 我知道这是某个地方的小错误,但我是 java 的新手。有人可以帮忙吗?
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
at java.base/java.lang.String.charAt(String.java:709)
at Assignments.Assignment1.main(Assignment1.java:12)
A
和a
不是同一个字符,字符串不匹配是正常的。
你可以做的是,在处理字符串以查看它是否是回文之前,将其转换为小写:
str = str.toLowerCase();
a
和 A
不是同一个字符。如果您不关心大小写,则可以在比较它们时将所有字符显式转换为小写(或大写):
while (i != j) {
if (Character.toLowerCase(str.charAt(i)) != Character.toLowerCase(str.charAt(j))) {
count++;
break;
}
i++;
j--;
}
编辑:
问题中更新的异常澄清了问题 - 它与 upper/lower 大小写差异无关,但与错误处理具有偶数个字符的字符串有关。要处理此问题,您可以使用 <
运算符而不是 !=
:
while (i < j) {
替换
if(str.charAt(i)!=str.charAt(j))
与
if(Character.toUpperCase(str.charAt(i))!=Character.toUpperCase(str.charAt(j)))
或者,
替换
if(str.charAt(i)!=str.charAt(j))
与
if(Character.toLowerCase(str.charAt(i))!=Character.toLowerCase(str.charAt(j)))
关键是比较相同大小写的字符
除此之外,您还需要
替换
while(i!=j)
与
while(i < j)
为了避免StringIndexOutOfBoundsException
.