【问题标题】:I am trying to write a code but facing a java.lang.StringIndexOutOfBoundsException. Please check the code out我正在尝试编写代码但面临 java.lang.StringIndexOutOfBoundsException。请检查代码
【发布时间】:2020-02-28 04:14:56
【问题描述】:

所以我试图接受多个输入。 这是问题:- 给定两个长度相等的字符串,你必须判断它们是否相同。

如果字符串 S1 的任何排列与字符串 S2 相等,则称两个字符串 S1 和 S2 相同。有关详细信息,请参阅示例说明。

输入: 第一行,包含一个表示否的整数“T”。的测试用例。 每个测试由一行组成,包含两个空格分隔的等长字符串 S1 和 S2。

输出:

对于每个测试用例,如果字符串 S1 的任何排列等于字符串 S2,则打印 YES,否则打印 NO。

约束:

1

1

字符串仅由小写字母组成。


import java.io.*;
import java.util.*;
public class test
{
    public static void main(String args[])throws IOException
    {
        String parts[]=new String[10];
        Scanner sc=new Scanner(System.in);
        System.out.println("Enter no of inputs");
        int n=sc.nextInt();
        int j=n;
        for(int i=0;i<j;i++)
        {
            System.out.println("Enter string");
            String s=sc.next();
            int in=s.indexOf(" ");
            String s1=s.substring(0,in);
            String s2=s.substring(in+1);
            boolean status = true;  
            if (s1.length() != s2.length()) 
            {  
                status = false;
            } 
            else 
            {  
                char[] ArrayS1 = s1.toCharArray();  
                char[] ArrayS2 = s2.toCharArray();  
                Arrays.sort(ArrayS1);  
                Arrays.sort(ArrayS2);  
                status = Arrays.equals(ArrayS1, ArrayS2);  
            }  
            if (status==true) 
            {  
                System.out.println(s1 + " and " + s2 + " are anagrams");  
            }    
            else 
            {  
                System.out.println(s1 + " and " + s2 + " are not anagrams");  
            }  
    }  
    }
}

错误
问题

【问题讨论】:

  • 错误在哪一行?请发表评论或以某种方式标记它。
  • String s=sc.next(); - s 永远不会包含空格,因此 int in=s.indexOf(" ");-1。试试sc.nextLine();
  • 听起来像是一个答案,@Elliott

标签: java


【解决方案1】:

问题在于声明

String s = sc.next();

这永远不会消耗带有空格的标记(因为空格是分隔符)。改成

String s = sc.nextLine();

然后

int in = s.indexOf(" ");

将起作用(但仅当输入包含空格时);所以你还是应该自己测试它不是-1

if (in >= 0) {
    String s1 /* ... */
}

还有,

int n=sc.nextInt();

将使用nextLine() 留下尾随换行符(并跳过您的下一个输入),所以也使用它。

int n=sc.nextInt();
sc.nextLine(); // <-- skip trailing new line.

【讨论】:

    【解决方案2】:

    如下修改你的代码:

    System.out.print("Enter no of inputs: ");
    int n = Integer.parseInt(sc.nextLine());
    for (int i = 0; i < n; i++) {
        System.out.print("Enter string: ");
        String s = sc.nextLine();
        ...
        ...
        ...
    }
    

    示例运行:

    Enter no of inputs: 3
    Enter string: Hello Hi
    Hello and Hi are not anagrams
    Enter string: 
    

    我建议你通过Scanner is skipping nextLine() after using next() or nextFoo()?更好地了解Scanner

    【讨论】:

      【解决方案3】:

      试试这个:

      System.out.println("Enter string");
      sc.nextLine();
      String s = sc.nextLine();
      

      【讨论】:

        【解决方案4】:

        试试下面的代码。它会根据您的要求打印 YES 和 NO。

        import java.io.IOException;
        import java.util.Arrays;
        import java.util.Random;
        import java.util.Scanner;
        
        // Main Class
        public class ThreadGroupDemo implements Runnable {
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        
            public static void main(String[] args) throws IOException {
                String parts[] = new String[10];
                Scanner sc = new Scanner(System.in);
                System.out.println("Enter no of inputs");
                int n = Integer.parseInt(sc.nextLine());
                int j = n;
        
                for (int i = 0; i < j; i++) {
                    System.out.println("Enter string");
                    String s = sc.nextLine();
                    int in = s.indexOf(" ");
                    String s1 = s.substring(0, in);
                    String s2 = s.substring(in + 1);
                    boolean status = true;
                    if (s1.length() != s2.length()) {
                        status = false;
                    } else {
                        char[] ArrayS1 = s1.toCharArray();
                        char[] ArrayS2 = s2.toCharArray();
                        Arrays.sort(ArrayS1);
                        Arrays.sort(ArrayS2);
                        status = Arrays.equals(ArrayS1, ArrayS2);
                    }
                    if (status == true) {
                        System.out.println("YES");
                    } else {
                        System.out.println("NO");
                    }
                }
            }
        }
        

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 2020-06-17
          • 2011-03-29
          • 1970-01-01
          • 2019-10-26
          • 1970-01-01
          • 2022-11-16
          相关资源
          最近更新 更多