将命令行参数拆分为字符串数组 --- 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()));
}
}
我是 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()));
}
}