我有这段代码找到下面的回文;我需要能够从用户输入字符串中删除所有数字,空格和标点符号,所以我一直在使用replaceAll
。当我的代码中只有String input = str.toLowerCase();
和String newInput = input.replaceAll("[0-9]+", "");
时,没有问题。它删除了数字并继续。但是,当我尝试添加标点或空格时,出现StringIndexOutOfBoundsException。什么导致这个StringIndexOutofBounds异常?
例:I输入Anna.55
所有replaceAll
声明的下一行,System.out.println(newestInput);
,将打印出anna
但到达while循环时,立即引发错误,并指出,问题是指数6.
从我的理解(我仍然在学习Java和我不熟悉replaceAll
)与replaceAll("\\s", "")
删除的空间将消除由以前replaceAll
语句留下的空隙,因此就没有指数6(甚至4)。在索引6不存在时,如何发生错误?
import java.util.Scanner;
public class PalindromeTester {
public static void main (String[] args) {
String str;
String another = "y";
int left;
int right;
Scanner scan = new Scanner (System.in);
while (another.equalsIgnoreCase("y")) {
System.out.println("Enter a potential palindrome:");
str = scan.nextLine();
left = 0;
right = str.length() - 1;
String input = str.toLowerCase();
String newInput = input.replaceAll("[0-9]+", "");
String newerInput = input.replaceAll("\\W", "");
String newestInput = newerInput.replaceAll("\\s", "");
System.out.println(newestInput);
while (newestInput.charAt(left) == newestInput.charAt(right) && left < right) {
left++;
right--;
}
System.out.println();
if (left < right)
System.out.println("That string is not a palindrome.");
else
System.out.println("That string is a palindrome.");
System.out.println();
System.out.print ("Test another palindrome (y/n)? ");
another = scan.nextLine();
}
}
}
首先''input.replaceAll(“\\ W”,“”)''不应该在这里使用'newInput'吗?第二:是否认为计算'right'是一个好主意,_before_你减少你的源字符串的大小? – Tom
'如果在索引为6时出现错误,它不再存在吗?'这不是回答你的问题吗?您需要包含堆栈跟踪的相关部分,以便人们更好地帮助您。 – John3136