Я пробовал, как в приведенном ниже коде, но это работает только в том случае, если есть только один набор символов и набор символов появляются в середине строки. Если набор появляется более одного раза и появляется в конце или в начале строки, результат будет ложным.
String str = "aaabbccdddefghjjkklmn";
for(int i = 1; i < str.length() - 1; i++){
if (str.charAt(i) != str.charAt(i+1) && str.charAt(i) != str.charAt(i-1)){
System.out.print(str.charAt(i));
}
}
С приведенной выше строкой результат должен быть только "efgh", но код выше отображает "efghlm"
2 ответа
Проблема, заставляющая вас пропустить начальные и конечные значения, заключается в том, как вы построили цикл for.
Должен быть:
for (int i = 0; i < str.length(); i++)
Поэтому вам нужно по-разному обрабатывать крайние случаи.
if ( (i+1 >= str.length() || str.charAt(i) != str.charAt(i+1)) && (i-1 < 0 || str.charAt(i) != str.charAt(i-1)) )
Таким образом, вы включаете первый и последний индексы без доступа вне диапазона. Кроме того, если вы хотите убедиться, что вы получаете только первый экземпляр символов, вам нужно немного кода, чтобы выйти из цикла. Присвойте логическое значение true, когда проверка вернет true. Если проверка возвращает false, проверьте, является ли найденный вами логический параметр true. Если это так, вырваться из цикла.
boolean foundMatch = false;
for (int i = 0; i < str.length(); i++) {
if ( (i+1 >= str.length() || str.charAt(i) != str.charAt(i+1)) && (i-1 < 0 || str.charAt(i) != str.charAt(i-1)) ) {
System.out.print(str.charAt(i));
foundMatch = true;
}
else {
if (foundMatch == true) break;
}
}
Ваш метод правильный. То, что вам нужно разорвать цикл после того, как найден повторяющийся символ, ПОСЛЕ того, как вы нашли первый набор неповторяющихся символов.
Ниже приведен фрагмент кода, эквивалентный JavaScript
var str = "aaabbccdddefghjjkklmn";
var result = "";
for(var i = 1; i < str.length - 1; i++){
// Find for non-repeating character
if (str.charAt(i) != str.charAt(i+1) && str.charAt(i) != str.charAt(i-1)){
result += str.charAt(i)
}
else {
// Repeating character found
// exit loop if non-repeating character already
// found
if (result.length > 0) {
break;
}
}
}
console.log(result);
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].