【问题标题】:ArrayIndexOutOfBoundsException for command line argument命令行参数的 ArrayIndexOutOfBoundsException
【发布时间】:2023-04-07 22:07:01
【问题描述】:

我有这个代码 sn-p:

class CMD{
    public static void main(String[] s){
        String[] spt = s[0].split(".");
        System.out.println(spt[0]);
    }
}

要执行我正在使用命令的程序:

java CMD Test.java

我应该程序应该打印Test,但我得到的是ArrayIndexOutOfBoundsException
为什么?

【问题讨论】:

  • 你想将什么参数传递给你的程序?
  • 你从哪里得到这个异常?分配给spt 时或之后打印时?

标签: java command-line-arguments indexoutofboundsexception


【解决方案1】:

问题是您在“。”上进行拆分。这意味着正则表达式中的“任何字符”。因此,虽然“任何字符”可以是分隔符,但您的拆分不会返回实际值。 (我很惊讶它没有返回一个空字符串或几个空字符串,但这是另一回事。)

如果你转义了“.”使用反斜杠(然后在字符串文字中转义反斜杠)它可以工作:

String[] spt = s[0].split("\\.");

另一种选择(这个小程序的大量杀伤力,但在现实世界的应用程序中很有用)是使用Guava 及其Splitter 类:

Splitter splitter = Splitter.on('.');
Iterable<String> bits = splitter.split(s);
for (String bit : bits) {
    System.out.println(bit);
}

【讨论】:

  • 您的代码有效。谢谢!但我仍然不明白为什么会有ArrayIndexOutOfBoundsException?为什么我需要`\\`?
  • @MohammadFaisal:你知道String.split 的参数是一个正则表达式吗?你对正则表达式有多熟悉?您对 Java 的字符串文字转义有多熟悉?基本上你只想要一个 \. 的正则表达式,但在 Java 字符串文字中你必须写成 "\\."
  • 我对正则表达式知之甚少。但我知道 Java 字符串文字转义。
【解决方案2】:

使用以下内容,您将得到答案。

java CMD "Test.java"

【讨论】:

  • 无需引用...Test.java 不包含任何值得引用的内容。
  • 试过这个吗? (它仍然中断。)
  • 不,我只是给出答案,据我说它会起作用。
  • 还是ArrayIndexOutOfBoundsException
  • @user2320537:它没有。尝试而不是猜测。
猜你喜欢
  • 2016-03-25
  • 2012-10-04
  • 2011-02-25
  • 2013-02-14
相关资源
最近更新 更多