Проверка соседей в строке с помощью Java

в строке типа «телефон» я хочу знать соседа символа «o», в данном случае «h» и «n», я пытался использовать String Iterator, но это дает мне либо до, либо после, и с charAt() я буду быть вне диапазона на -1 или бесконечный цикл

String s = textArea.getText();
    
    for( int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        char tz = s.charAt(i--);
                            
            System.out.print(ch);
            if (ch == 'n') {
            System.out.print(tz);
            break;
            }
        }
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
351
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

s.charAt(i--) вычитает единицу в цикле. Это приводит к бесконечному циклу. Вместо этого вы можете попробовать s.charAt(i-1)

вне диапазона на -1. я думаю, из-за петли. Но все равно спасибо @Dmitriy Mishenyov

KarebCN 24.12.2020 21:07
Ответ принят как подходящий

вы можете попробовать что-то вроде этого. Конечно, вы все еще можете внести изменения в код, чтобы получить ожидаемый результат.

public void stringSplit(String text)
    {
        char[] letters = text.toCharArray();
        for (int i=0; i<letters.length;i++)
        {
            if (i!=0 && i!=letters.length-1){
                System.out.print("neighbour left: " + letters[i - 1] +'\n');
                System.out.print("actual: " + letters[i]+'\n');
                if (letters[i - 1] == 'n') { //here I used the condition from your code
                    System.out.print("neighbour right: " + letters[i + 1] +'\n');
                    break;
                }
            }
            else if (i==0)
            {
                System.out.print("actual: " + letters[i]+'\n');
                System.out.print("neighbour right: " + letters[i + 1] +'\n');
            }
            else{
                System.out.print("neighbour left: " + letters[i - 1] +'\n');
                System.out.print("actual: " + letters[i]+'\n');

                System.out.println("end of string");
            }
        }
    }

В этой версии у вас проверены все угловые случаи. У вас остались вопросы?

Спасибо, это работает! у меня на самом деле есть вопрос. Как бы вы попытались получить пользовательский ввод с помощью JTextAera? пользователь набирает какой-то текст, и я пытаюсь напрямую запустить его в своем коде и использовать другой JTextArea, чтобы распечатать его? Будет ли DocumentListner лучшим выбором? @studs-need-help

KarebCN 24.12.2020 21:11

Ну, вы можете попытаться получить ввод от пользователя (с клавиатуры) с помощью сканера, а затем я бы преобразовал его в JTextArea. Я думаю, это будет примерно так: Scanner myObj = new Scanner(System.in); Область JTextArea = новая область JTextArea (myObj.nextLine());

studs-need-help 26.12.2020 00:20

попробуй это :

public static void main(String[] args) {
    String s = "phone";
    char[] arr = neighbour(s, 'o');
    System.out.println("previous : "+arr[0]);
    System.out.println("next : "+arr[1]);
}

public static char[] neighbour(String s , char c){
    int index = s.indexOf(c);
    if (index == -1) throw new Error("character '"+c+"' not exist in \""+s+"\" ");
    char[] arr = new char[2];
    if (index > 0)
        arr[0] = s.charAt(index-1);
    if (index+1 < s.length())
        arr[1] = s.charAt(index+1);
    return arr;
}

это позволит получить следующий и предыдущий символы от определенного символа и поместить их в массив из 2 символов.

Другие вопросы по теме