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。
答案 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()
方法读取当前行的所有内容。当前行可能只有一个返回空字符串的换行符。