java - 在 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
不是同一个字符。如果您不关心大小写,则可以在比较它们时将所有字符显式转换为小写(或大写):
while (i != j) {
if (Character.toLowerCase(str.charAt(i)) != Character.toLowerCase(str.charAt(j))) {
count++;
break;
}
i++;
j--;
}
编辑:
问题中更新的异常澄清了问题 - 它与大小写差异无关,但与偶数个字符的字符串处理错误有关。要处理此问题,您可以使用<
运算符而不是!=
:
while (i < j) {
推荐阅读
- sql - 如何使用oracle数据库创建表
- angular - Angular 8 如何在表格下拉列表中包含 json 子级值或重复 JSON 第一级值
- r - 距离/模糊匹配 2 列与 R 中的另外 2 列
- elasticsearch - 使用 Must Field 值编写 Elasticsearch Nest Bool 查询
- javascript - 在结果中传递给 Google 方向服务的地点 id 与最初的结果不同,为什么?
- c# - Task.Run 是否会产生 I/O 绑定操作的开销?
- string - 在bash中将字符串拆分为多个部分
- python - 是否有在 Google Colab 上运行 Web 应用程序的通用方法?
- python - Python(正则表达式:替换单个字母后的每个字符)
- elf - 需要将 OMF 文件转换为 ELF 文件格式