[英]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.