【问题标题】:Java error: java.lang.ArrayIndexOutOfBoundsException: 1Java 错误:java.lang.ArrayIndexOutOfBoundsException:1
【发布时间】: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


【解决方案1】:

注意:StringBuilder 仅用于演示

if (YOURSTRING.contains("*")) {
   StringBuilder builder=new StringBuilder();
   String parts[] = YOURSTRING.split("\\*");
   for (int i = 0; i < parts.length; i++) {
       builder.append(parts[i]);
   }
        System.out.println(builder.toString());
} else {
  System.out.println("Error: no *");
}

使用 for 循环而不是从数组中静态获取值 因为如果 spit 会做 1 次非然后这条线 String part1 = parts[0]; String part2 = parts[1]; return ArrayIndexOutOfBoundsException 因为没有第二个元素 int 数组来获取,明白吗?

【讨论】:

  • getText() 方法...它不起作用。我是 Java 的新手,所以我可能会问一些 lamer 的问题,但是哦,好吧
  • 知道了。但是如何在两个部分之间嵌入 subWord 呢?只需做 System.out.println(parts[0] + subs + parts[1]);?还是会出现同样的问题?
  • 我确实注意到了逻辑,但这只是我对 Java 很陌生,所以我认为这些是真正的方法
  • 用户输入 "Ame*ca" 然后他输入 "ri" 。输出是“美国”。这真的是我的学校作业
  • @user3687547 String#replace 应该是你所需要的。
【解决方案2】:

感谢所有帮助我的人!在解决这个任务之前,我已经学习了大约 10 种新方法,直到找到解决方案。那是一次有益的经历。这个作业完成了,我得了 A(100%)!谢谢各位!

import java.util.Scanner;

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

        Scanner scan = new Scanner(System.in);

        System.out.println("Enter the first String:");

        String first = scan.nextLine();

        System.out.println("Enter the replacement String:");

        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("*")) {
                System.out.println(first.replace("*", subs));
            } else {
                System.out.println("Error: no *");
            }

        } else {
            System.out.println("Error: Incorrect characters");

        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 2019-07-23
    • 1970-01-01
    • 2019-03-30
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多