【发布时间】:2015-11-04 04:07:56
【问题描述】:
我正在制作一个简单的程序,它将在单词 ex: “Some*ing” 的中间使用一个带有“*”的单词,并将使用另一个字符串将其替换为第一个单词中的“*”。像 "th" -> 输出 "Something"。
样品运行 1:
输入第一个字符串:
D*g
输入替换字符串:
在
丁
足够简单。我在 IDEA 中制作了这个程序(运行 Java 8),它运行良好(尽管我仍然需要添加一些小东西)。 但是在 CodeRunner 中我遇到了一些问题。它说“java.lang.ArrayIndexOutOfBoundsException:1”。我的代码中有一些错误,我不知道它在哪里。 我的代码:
import java.util.Scanner;
import java.lang.Math;
import java.io.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter the first String:");
//The inital String
String first = scan.nextLine();
System.out.println("Enter the replacement String:");
// SubString
String subs = scan.nextLine();
if (!(first.contains("!") || first.contains("@") || first.contains("#") || first.contains("$") || first.contains("%") || first.contains("^") || first.contains("&") || first.contains("(") || first.contains(")") || first.contains("+") || first.contains("-") || first.contains("_") || first.contains("~") || first.contains("`") || first.contains("\\") || first.contains("[") || first.contains("]") || first.contains("{") || first.contains("}") || first.contains(":") || first.contains(";") || first.contains("'") || first.contains("\"") || first.contains("/") || first.contains("?") || first.contains(".") || first.contains(">") || first.contains(",") || first.contains("<"))) {
if (first.contains("*") ) {
String parts[] = first.split("\\*");
String part1 = parts[0];
String part2 = parts[1];
String newString = part1 + subs + part2;
System.out.println(newString);
} else {
System.out.println("Error: no *");
}
} else {
System.out.println("Error: Incorrect characters");
}
}
}
CodeRunner 给了我这个
Runtime Error
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Main.main(Main.java:298)
at Ideone.assertRegex(Main.java:125)
at Ideone.test(Main.java:61)
at Ideone.main(Main.java:28)
虽然代码可以在我的 IDE 中运行,但我们假设可以使代码在 codeRunner 上运行
谢谢
【问题讨论】:
-
读取异常。根据它告诉您的内容进行调试。在 Main.java 的第 298 行,当
something[1]不存在时,您正在访问它。 -
看起来
String parts[] = first.split("\\*");没有按照您的预期进行。它将拆分字符\和*。那里没有正则表达式操作。查看File类,看看它是否为您提供了一些有用的方法(提示:确实如此)。此外,请筛选您的代码以查找不恰当的语言。 -
浏览您的
loops 并了解它们在运行时的工作方式 -
John3136 没有第 298 行。我的班级只有大约 80 行。
-
已解决!谢谢大家
标签: java runtime-error