使用 Java 检查字符串中的邻居
Check Neighbours in a String with Java
在 字符串 中 "phone" 我想知道 邻居 字符 'o' case '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");
}
}
}
在这个版本中,您检查了所有极端情况。还有问题吗?
试试这个:
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 个字符的数组中。
在 字符串 中 "phone" 我想知道 邻居 字符 'o' case '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");
}
}
}
在这个版本中,您检查了所有极端情况。还有问题吗?
试试这个:
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 个字符的数组中。