[英]Facing this error in my Code : 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");
}
}
}
}
錯誤
問題
問題是聲明
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.