Java:regionMatches,用于比较用户输入的两个字符串

时间:2018-08-03 18:27:24

标签: java

import java.util.Scanner;

public class CompareStrings {
    public static void main(String[] args) {

        // prompted user input
          Scanner input = new Scanner(System.in);
            int firstIndex;
            int secondIndex;

            System.out.print("Enter First String:"); // prompt user
                String stringNumberOne = input.next(); // assigns stringNumberOne to user input
            System.out.print("Enter Second String:"); // prompt
                String stringNumberTwo = input.next(); // assigns stringNumberTwo to user input


            System.out.print("Enter Starting Index for First String:"); // prompt
                 firstIndex = input.nextInt(); // assigns firstIndex to user input
            System.out.print("Enter Starting Index for Second String:"); // prompt
                 secondIndex = input.nextInt(); // assigns secondIndex to user input
            System.out.print("Enter Number of Characters to be Compared:"); // prompt
                int numberCompared = input.nextInt(); // assigns numberCompared to user input

            boolean results = stringNumberOne.regionMatches(firstIndex,
                    stringNumberTwo, secondIndex, numberCompared);   

            if (results)
                System.out.println(true);
            else
                System.out.println(false);
    }
}

这是我的代码。我正在尝试使用String方法regionMatches比较用户输入的两个字符串。该程序应提示用户输入两个字符串,第一个字符串中的起始索引,第二个字符串中的起始索引,以及要比较的字符数。然后,程序应打印字符串是否相等(真/假)。比较期间忽略字符的大小写。我已经编写了上面的代码,如果输入了像“ Hello”之类的单词,则可以正确运行程序。 但是,如果我写“你好,这是我的Java程序”之类的句子,则会收到一条错误消息,指出

  

String:线程“主”中的接收java.util.InputMismatchException

,然后代码将无法运行。它突出显示了我的firstIndex = input.nextInt();代码的一部分。任何帮助将不胜感激!感谢您抽出宝贵的时间阅读这篇文章! :)

2 个答案:

答案 0 :(得分:2)

String stringNumberOne = input.next();docsnext()

  

从此扫描器中查找并返回下一个完整令牌。

next()仅获取下一个完整令牌。 (在这种情况下,只有第一个单词)因此,当您输入整个句子时,两个next()调用将被解决,而您将尝试将第三个单词解析为int,这将引发一个InputMismatchException例外。将此行更改为

String stringNumberOne = input.nextLine();

要抓一整行。

答案 1 :(得分:0)

在Java中,用main方法编写所有内容并不是一种好习惯。 这是我的答案:

class Test {
    
    
    final static Scanner sc = new Scanner(System.in);

    private String str1;
    private String str2;
    private int toffset;
    private int ooffset;
    private int len;
    
    public Test() {

             this("", "");
        
    }
    public Test(String str1, String str2) {
             super();
             this.str1 = str1;
             this.str2 = str2;
    }

    @Override
    public String toString() {
             return this.str1+" and "+this.str2;
                
    }
    
    public Test[] accept() {
            
             Test[] arr = new Test[1];
             System.out.print("Enter First String   : ");
             this.str1 = sc.nextLine();
             
             System.out.print("Enter Second String  : ");
             this.str2 = sc.nextLine();
             
             System.out.print("Enter toffset    : "); 
             this.toffset  = sc.nextInt();
             
             System.out.print("Enter ooffset    : "); 
             this.ooffset = sc.nextInt(); 
            
             System.out.print("Enter Length     : "); 
             this.len = sc.nextInt(); 
             
             arr[0] = new Test(str1, str2);
             return arr;
            
    }
    
    public void print(Test[] arr)
    {
             for(Test t : arr)
                 System.out.println("Strings you want to compare are : "+t);
    
    }
    
    public void compareString() {
        
             System.out.println("Answer : "+str1.regionMatches(toffset ,str2, ooffset, len));
    }
    

}


public class Program {
    
    
    public static void main(String args[]){
                   
              Test t = new Test();
              Test[] arr = t.accept();
              t.print(arr);
              t.compareString();
          
    }
}