в строке типа «телефон» я хочу знать соседа символа «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;
}
}




s.charAt(i--) вычитает единицу в цикле. Это приводит к бесконечному циклу. Вместо этого вы можете попробовать s.charAt(i-1)
вы можете попробовать что-то вроде этого. Конечно, вы все еще можете внести изменения в код, чтобы получить ожидаемый результат.
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
Ну, вы можете попытаться получить ввод от пользователя (с клавиатуры) с помощью сканера, а затем я бы преобразовал его в JTextArea. Я думаю, это будет примерно так: Scanner myObj = new Scanner(System.in); Область JTextArea = новая область JTextArea (myObj.nextLine());
попробуй это :
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 символов.
вне диапазона на -1. я думаю, из-за петли. Но все равно спасибо @Dmitriy Mishenyov