У меня есть этот код, чтобы найти палиндром ниже; Мне нужно удалить все числа, пробелы и пунктуацию из строки ввода пользователя, поэтому я использовал replaceAll
. Когда у меня только String input = str.toLowerCase();
и String newInput = input.replaceAll("[0-9]+", "");
в моем коде, проблем не было. Он удаляет номера и продолжается. Однако, когда я пытаюсь добавить пунктуацию или пробел, я получаю исключение StringIndexOutOfBoundsException.Что вызывает это исключение StringIndexOutofBounds?
Пример: Я ввод Anna.55
Линия под все replaceAll
заявления, System.out.println(newestInput);
, печатает anna
но сразу же бросает ошибку при достижении времени цикла и заявляет, что проблема с индексом 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_ вы уменьшаете размер вашей строки String? – Tom
'Как есть ошибка при индексе 6, когда она больше не существует?' Разве такой ответ не отвечает на ваш вопрос? Вам нужно включить соответствующие части трассировки стека, чтобы дать людям больше шансов помочь вам. – John3136