Как рекурсивно проверить, начинается ли строка и заканчивается ли она другой строкой в ​​Java без функции равенства()?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как рекурсивно проверить, начинается ли строка и заканчивается ли она другой строкой в ​​Java без функции равенства()?

Сообщение Anonymous »

Мне нужно написать метод Private static boolean textStartSeqEndSeq(String text, String Sequence).
Метод сравнивает текст и последовательность , где последовательность должна быть в начале и в конце текста. Таким образом, он должен содержаться в тексте как минимум дважды.
Например:
текст «ABCDEFG» и последовательность «AB» верны только частично, поэтому верните false.
текст «AB123AB» и последовательность «AB» вернут true.
Обычно это было бы легко, но вот ограничения:
  • Нет вспомогательных методов, только один метод и основной метод.
  • Никаких циклов и массивов, только рекурсия.
  • Используйте только isEmpty(), length(), substring() и charAt(), не используйтеquals().
Я, наверное, слишком много думаю об этом, потому что я уже давно застрял на этом, но все, что я получаю, это ошибка после ошибка. Я просто не могу понять, что я делаю не так, к тому же я новичок, поэтому для вас это может показаться очевидным, и вы можете мне помочь. Вот код, который у меня есть:
private static boolean isStartAndEndSeq(String text, String sequence) {
// Base cases
if (text.isEmpty() || sequence.isEmpty() || sequence.length() > text.length()) {
return false;
}
if (sequence.length() * 2 > text.length()) {
return false; // Not enough room for sequence at both start and end
}

int i = 0, j = 0;
boolean start = false, end = false;
String case1 = text.substring(0, sequence.length() - 1);
String case2 = text.substring(text.length() - sequence.length());

// Check if `text` starts with `sequence` using recursion
if (!start) {
if (case1.charAt(i) != sequence.charAt(i)) {
return false;
}
return isStartAndEndSeq(text.substring(i + 1), sequence.substring(i + 1));

}
if (!end) {
if (text.charAt(j) != sequence.charAt(j)) {
return false;
}
return isStartAndEndSeq(text.substring( j + 1), sequence.substring(j + 1));
}
return start && end;
}

public static void main(String[] args) {
System.out.println(isStartAndEndSeq("AB123AB", "AB"));// Expected: true
System.out.println(isStartAndEndSeq("ABBA", "AB"));// Expected: false
System.out.println(isStartAndEndSeq("ottootto", "otto"));// Expected: true
System.out.println(isStartAndEndSeq("Golden Yacht", "acht"));// Expected: false
System.out.println(isStartAndEndSeq("blue whales are blue", "blue"));// Expected: true
System.out.println(isStartAndEndSeq("", "A"));// Expected: false
System.out.println(isStartAndEndSeq("A", ""));// Expected: false
System.out.println(isStartAndEndSeq("A B C D", " "));// Expected: false
}
}

И вот какие ошибки я получаю: обработка прекращается до того, как достигнет if (!end){}:
C:\Users\Administrator\.jdks\corretto-21.0.3-3\bin\java.exe "-javaagent:C:\Program Files\JetBrainsNew\IntelliJ IDEA Community Edition 2024.2.3\lib\idea_rt.jar=56733:C:\Program Files\JetBrainsNew\IntelliJ IDEA Community Edition 2024.2.3\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\Administrator\IdeaProjects\ProgrammersProgram\out\production\ProgrammersProgram Temp
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
at java.base/java.lang.String.checkIndex(String.java:4832)
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:46)
at java.base/java.lang.String.charAt(String.java:1555)
at Temp.isStartAndEndSeq(Temp.java:29)
at Temp.isStartAndEndSeq(Temp.java:32)
at Temp.main(Temp.java:45)

Process finished with exit code 1


Подробнее здесь: https://stackoverflow.com/questions/791 ... ng-in-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»