繁体   English   中英

将命令行参数拆分为字符串数组— 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”之后我得到了以下消息:

线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:第8行为1

我究竟做错了什么?

参见下面的代码。 命令行参数已由空格分隔,因此您无需传递任何逗号分隔的字符串并调用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()));
    }
}  

实际上,所有逗号和空格都是分裂的。 “ [,]”是一个正则表达式。 之所以会出现异常,是因为您超出了edges数组的长度。

而不是在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]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM