为什么我的字符串不能容纳空格?

时间:2013-12-12 04:47:41

标签: java string space

import java.util.Scanner;

public class TestEditor {
    public static void main(String[] args){
        String input;
        char[] words = new char[100];
        int choice=0;
        int start=0;
        int end=0;
        LineEditor myEditor = new LineEditor();
        LineEditor myEditor2 = new LineEditor();
        String input2 = null;
        System.out.println("+++++++ LineEditor starts... +++++++\n");
        System.out.println("* Write the text you want (maximum length: 100): ");
        Scanner in = new Scanner(System.in);
        input = in.next();
        while(input.length()>100){
            System.out.println("* Operation failed: You exceeded the maximum length.");
            System.out.println("* Write the text you want (maximum length: 100): ");
            input = in.next();
            System.out.println("\n");
        }

        System.out.println("--------------------------------------\n");
        do{
            System.out.println("*Choose the menu:\n1. Insert\n2. Delete\n3. Replace\n4. Quit");
            choice=in.nextInt();
            System.out.println("\n");
            if(choice==1){
                System.out.println("* Enter the starting position:");
                start = in.nextInt();
                System.out.println("* Enter the text you want to replace:");
                input2=in.next();
                myEditor.insert(input, start, input2);
            }
            if(choice ==2){
                System.out.println("* Enter the starting and ending position for deletion.");
                start=in.nextInt();
                end=in.nextInt();
                myEditor.delete_text(input, start,end);
            }
            if(choice==3){
                System.out.println("* Enter the starting and ending position for insertion.");
                start=in.nextInt();
                end=in.nextInt();
                System.out.println("* Enter the text you want to replace:");
                input2=in.next();
                myEditor.replace(input, input2, start, end);
            }
        }while(choice !=4);
        System.out.println("Good Bye!");
    }
    }


    public class LineEditor {
    private static char [] text;
    private static char [] text2;


    public LineEditor(){
        text=new char[100];
        text2=new char[100];
    }

    public void insert(String input, int start, String input2){
        start = start-1;
        int j=0;
        for(int i=0;i<input.length();i++){
            text[i]=input.charAt(i);
        }
        for(int i=0; i<input2.length();i++){
            text2[i]=input2.charAt(i);
        }
        for(int i=start; i<input.length();i++){
            text[i]=text[i+start];
        }
        for(int i=start; i<input.length();i++){
            text[i]=text2[j];
            j++;
        }
        for(int i=0; i<text.length;i++){
            System.out.print(text[i]);
        }

    }
    public void delete_text(String input, int start, int end){
        for(int i=0;i<input.length();i++){
            text[i]=input.charAt(i);
        }
        start=start-1;
        int num = end-start;
        for(int i=start; i<end;i++){
            text[i]=text[i+num];
        }
        for(int i=end;i<text.length;i++){
            if((i+end)<100){
                text[i]=text[i+end];
            }else{
                text[i]=text[i-end];
            }
        }
        for(int i=0; i<text.length;i++){
            System.out.print(text[i]);
        }
    }
    public void replace(String input, String input2, int start, int end){
        start = start-1;
        int j=0;
        for(int i=0;i<input.length();i++){
            text[i]=input.charAt(i);
        }
        for(int i=0; i<input2.length();i++){
            text2[i]=input2.charAt(i);
        }
        for(int i=start; i<input.length();i++){
            text[i]=text[i+start];
        }
        for(int i=start; i<input.length();i++){
            text[i]=text2[j];
            j++;
        }
        for(int i=0; i<text.length;i++){
            System.out.print(text[i]);
        }

    }
}

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at TestEditor.main(TestEditor.java:29)

所以那些是我的两个类,当我在初始输入中放置一个空格时,我不断收到此错误。当我将它传输到数组时,甚至不会发生错误。有人可以解释一下吗?如果你想看一下,这里还有一个link for the exact prompt

4 个答案:

答案 0 :(得分:2)

而不是in.next(),请尝试使用in.nextLine()。看看是否有所作为。

答案 1 :(得分:1)

next()替换为nextLine()

next()将空格作为分隔符,因此当您输入例如“Hello test”,它只将“Hello”作为第一个输入,剩下的字符串作为下一个扫描程序调用的输入(在你的情况下是choice=in.nextInt();)并且它将无法将字符串解析为int。

答案 2 :(得分:0)

来自Docs

  public class InputMismatchException
    extends NoSuchElementException

由扫描程序抛出,表示检索到的令牌与预期类型的​​模式不匹配,或者令牌超出预期类型的​​范围。

答案 3 :(得分:0)

next()更改为nextLine()

next()只能读取输入直到空格。它无法读取由空格分隔的两个单词。此外,next()在读取输入后将光标放在同一行。

nextLine()读取输入,包括单词之间的空格(即,它读取直到行的结尾\ n)。读取输入后,nextLine()将光标定位在下一行。

使用nextLine()方法读取当前行的所有内容。当前行可能只有一个返回空字符串的换行符。