【问题标题】:Check Neighbours in a String with Java使用 Java 检查字符串中的邻居
【发布时间】:2020-12-23 22:06:25
【问题描述】:

"phone" 这样的字符串中,我想知道 字符 邻居 'o' 在这种 case 'h''n' 我尝试使用字符串迭代器,但这给了我之前或之后并使用 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;
            }
        }

【问题讨论】:

    标签: java loops character charat


    【解决方案1】:

    s.charAt(i--) 循环减一。它导致无限循环。你可以试试s.charAt(i-1)

    【讨论】:

    • 超出范围 -1。我猜是因为循环。但无论如何感谢@Dmitriy Mishenyov
    【解决方案2】:

    你可以试试这样的。当然,您仍然可以对代码进行更改以获得预期的结果。

    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 area=new JTextArea(myObj.nextLine());
    【解决方案3】:

    试试这个:

    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 个字符的数组中。

    【讨论】:

      猜你喜欢
      • 2016-04-07
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      相关资源
      最近更新 更多