簡體   English   中英

我正在嘗試編寫代碼但面臨 java.lang.StringIndexOutOfBoundsException。 請檢查代碼

[英]I am trying to write a code but facing a java.lang.StringIndexOutOfBoundsException. Please check the code out

所以我試圖接受多個輸入。 這里的問題是:- 給定兩個長度相等的字符串,您必須判斷它們是否相同。

如果字符串 S1 的任何排列等於字符串 S2,則稱兩個字符串 S1 和 S2 相同。 有關更多詳細信息,請參閱示例說明。

輸入:第一行,包含一個表示沒有的整數“T”。 測試用例。 每個測試由一行組成,包含兩個等長的空格分隔的字符串 S1 和 S2。

輸出:

對於每個測試用例,如果字符串 S1 的任何排列等於字符串 S2,則打印 YES 否則打印 NO。

約束:

1<= T <=100

1<= |S1| = |S2| <= 10^5

字符串僅由小寫字母組成。


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");  
            }  
    }  
    }
}

java.lang.StringIndexOutOfBoundsException 錯誤
問題仍然存在問題

問題是聲明

String s = sc.next();

這永遠不會消耗帶有空格的標記(因為空格是分隔符)。 將其更改為

String s = sc.nextLine();

進而

int in = s.indexOf(" ");

將工作(但僅當輸入包含空格時); 所以你仍然應該自己測試它不是-1

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

還,

int n=sc.nextInt();

將使用nextLine()留下尾隨的換行符(並跳過您的下一個輸入nextLine()因此也使用它。

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

更改您的代碼如下:

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: 

我建議您在使用 next() 或 nextFoo() 后查看Scanner 是否跳過 nextLine()? 為了更好地了解Scanner

嘗試這個:

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

試試下面的代碼。 它根據您的要求打印 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");
            }
        }
    }
}

我希望它有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM