将命令行参数拆分为字符串数组 --- Java

Split command line arguments into string array --- Java

我是 Java 的新手,仍在适应面向对象的编程(C 程序员)。

命令行参数:AB5、BC4、CD8、DC8、DE6、AD5、CE2、EB3、AE7

代码:

public static void main(String[] args)
{   
    String[] edges = args[0].split("[, ]"); 

    for(int i = 0; i < 9; i++)
        System.out.println(edges[i]);
}

我认为它的作用:

应该使用空格和逗号作为分隔符将第一个参数拆分为字符串数组。我想打印出来看看它是否有效,但在它打印出来后我收到了这条消息 "AB7":

线程中的异常 "main" java.lang.ArrayIndexOutOfBoundsException:第 8 行 1

我做错了什么?

实际上是对所有逗号和空格进行拆分。 “[]”是正则表达式。您收到该异常是因为您超出了边缘数组的长度。

而不是在 9 中进行硬编码,您应该在循环不变量中使用数组的长度来避免这个问题。

public static void main(String[] args)
{   
    String[] edges = args[0].split("[, ]"); 

    for(int i = 0; i < edges.length; i++)
        System.out.println(edges[i]);
}

不过在您的示例中,参数实际上已经在空格处拆分并存储到 args 数组中。

您可以忘记逗号,只需将参数传递为:

AB5 BC4 CD8 DC8 DE6 AD5 CE2 EB3 AE7

然后像这样遍历它们:

public static void main(String[] args)
{
    for(int i = 0; i < args.length; i++)
        System.out.println(args[i]);
}

见下面的代码。命令行参数已经用空格分隔,因此您不需要传递任何逗号分隔的字符串并调用 split。

public class Test {
    public static void main(String[] args)
    {   
        String[] edges = args;//args[0].split("[, ]"); 

        for(int i = 0; i < edges.length; i++)
            System.out.println(edges[i]);
    }   
}

您可以在 args 中使用单独的命令行参数。但是,如果您的用户坚持要写逗号作为装饰:

public static void main(String[] args){   
   String[] edges = String.join( " ", args ).split("[, ]"); 
   for(int i = 0; i < edges.length; i++)
      System.out.println(edges[i]);
   }
}

如果有逗号,这也会去掉逗号。

在 Java 中,您需要按如下方式进行

1) 为您创建一个正则表达式模式

Pattern pattern = Pattern.compile("[ ,]") ;

2) 现在您需要将其与您输入的内容进行匹配

Matcher matcher = pattern.matcher(input);

3) 可以打印如下

while(matcher.find()){
     System.out.println(String.format("found match of %s at %d and %d ",  matcher.group(), matcher.start(), matcher.end()));
 }

// sample code
public static void main(String[] args){
StringBuilder sb = new StringBuilder();
    for(String arg: args){
        sb.append(arg);
    }

    Matcher matches = Pattern.compile("[ ,]").matcher(sb);
    while(matches.find()){
        System.out.println(String.format("found match of %s at %d and %d ",    matches.group(), matches.start(), matches.end()));
    }
}