Java 处理命令行参数
我们有一个调用Java程序的shell脚本。 脚本为中定义的方法传递参数值 我的Java程序的主要方法 参数的预期输入格式如下所示Java 处理命令行参数,java,parameters,main,Java,Parameters,Main,我们有一个调用Java程序的shell脚本。 脚本为中定义的方法传递参数值 我的Java程序的主要方法 参数的预期输入格式如下所示 "Test1, Test1_21APR15,XYZ,Test,Test, , , 2015-04-21" "Test2, Test2_21APR15,XYZ,Test,Test, , ,2015-04-21" "Test3,Test3_21APR15,XYZ, Test,Test, , ,2015-04-21" 以此类推,即每个字符串都有属性,属性用逗号
"Test1, Test1_21APR15,XYZ,Test,Test, , , 2015-04-21"
"Test2, Test2_21APR15,XYZ,Test,Test, , ,2015-04-21"
"Test3,Test3_21APR15,XYZ, Test,Test, , ,2015-04-21"
以此类推,即每个字符串都有属性,属性用逗号分隔,字符串用空格分隔(我在下一行提到过,但实际值将用空格分隔)
根据上述输入值,我需要为本地属性赋值,如下所示:
attr1 = Test1,Test2,Test3
attr2 = Test1_21APR15,Test2_21APR15,Test3_21APR15
attr3 = XYZ,XYZ,XYZ
attr4 = Test,Test,Test
.
.
.
attr8 = 2015-04-21,2015-04-21,2015-04-21,
然后我需要在我的方法中处理这些参数
我知道,当您将参数传递给main方法时,它们被放置在arg[]
数组中,但现在我在为属性分配参数值时遇到了问题
有人能在这方面给我一些指导吗?提前感谢。您可以将命令行参数传递给JAVA主类,如下所示:
java TestMain "Test1, Test1_21APR15,XYZ,Test,Test, , , 2015-04-21" "Test2, Test2_21APR15,XYZ,Test,Test, , ,2015-04-21" "Test3,Test3_21APR15,XYZ, Test,Test, , ,2015-04-21"
TestMain类的内容如下所示
public class TestMain {
public static void main(String[] args) {
String attr0=args[0];
String attr1=args[1];
String attr2=args[2];
......................use attributes here..............
}
}
输出
attr1 = Test1,Test2,Test3
attr2 = Test1_21APR15,Test2_21APR15,Test3_21APR15
attr3 = XYZ,XYZ,XYZ
attr4 = Test,Test,Test
.
.
.
attr8 = 2015-04-21,2015-04-21,2015-04-21
如果将每个集合传递为“,”分隔,而不是像
"Test1, Test1_21APR15,XYZ,Test,Test, , , 2015-04-21, Test2, Test2_21APR15,XYZ,Test,Test, , ,2015-04-21"
然后我们可以使用下面的逻辑
这里“testnum”是我们所指的输入行数,“testlen”是每行中的字符串数
for(int i=0;i<testlen;i++){
for(int j=0;i<testnum;j++){
attr[i]=attr[i]+args[j*testlen+i]
if(j<testnum-1)
attr[i]=attr[i]+",";
}
}
for(int i=0;i参数可以传递为:
java CommadLineArguments“parm1,param2”“param3,param4”
这里,空格是jvm的分隔符。它将用空格作为delimeter拆分并填充args数组
课程包括:
public class CommadLineArguments {
public static void main(String[] args) {
if (args == null) {
System.out.println(" No Arguments ");
} else {
String att1 = args[0];
String att2 = args[1];
}
}
}
在我看来,每个args字符串中逗号分隔值的数量是由数据模型强制的
因此,我建议下面的解决方案。它不像其他方案那样简短或通用,但可能符合您的要求
package stackoverflow;
import java.util.*;
public class DemoMain
{
final static int COUNT_COLUMNS =8;
public static void main(String[] args) throws IllegalFormatException
{
StringBuilder[] attributes = new StringBuilder[COUNT_COLUMNS];
for (int i=0; i< COUNT_COLUMNS; i++)
{
attributes[i]=new StringBuilder();
}
for (int numArgs=0; numArgs<args.length; numArgs++)
{
String[] values = args[numArgs].split(" *, *");
if (values.length != COUNT_COLUMNS)
{
throw new IllegalArgumentException("invalid number of fields, must be "+ COUNT_COLUMNS);
}
int numVal=0;
for (String val : values)
{
attributes[numVal].append(numArgs > 0 ? "," : "").append(val.trim());
numVal++;
}
}
for (StringBuilder att : attributes)
{
System.out.println(att);
}
}
}
包堆栈溢出;
导入java.util.*;
公共类DemoMain
{
最终静态整数计数_列=8;
公共静态void main(字符串[]args)引发IllegalFormatException
{
StringBuilder[]属性=新StringBuilder[计数列];
对于(int i=0;i
感谢您的想法和代码,它似乎在工作,但对我来说,我得到了空值,如下所示:attr1=nullTest1,Test2 attr2=nullTest1_21APR15,Test2_21APR15 attr3=nullXYZ,XYZ attr4=nullTest,Test,据我所知,拆分是基于“,”进行的,对吗?但我之间有空格每个字符串。我正在尝试。如果我得到了它,我将进行更新,我不知道为什么它会给我空值…我得到如下输出:attr1=nullXRX_测试,XRX_测试1 attr2=nullXRX_测试22APR,XRX_测试1_22APR attr3=nullAL LDG,AL LDG attr4=nullTest,Test attr5=nullTest,Test attr6=null,attr7=null,attr8=null 2015-04-202015-04-20。你知道吗你知道这是什么原因吗?
public class CommadLineArguments {
public static void main(String[] args) {
if (args == null) {
System.out.println(" No Arguments ");
} else {
String att1 = args[0];
String att2 = args[1];
}
}
}
package stackoverflow;
import java.util.*;
public class DemoMain
{
final static int COUNT_COLUMNS =8;
public static void main(String[] args) throws IllegalFormatException
{
StringBuilder[] attributes = new StringBuilder[COUNT_COLUMNS];
for (int i=0; i< COUNT_COLUMNS; i++)
{
attributes[i]=new StringBuilder();
}
for (int numArgs=0; numArgs<args.length; numArgs++)
{
String[] values = args[numArgs].split(" *, *");
if (values.length != COUNT_COLUMNS)
{
throw new IllegalArgumentException("invalid number of fields, must be "+ COUNT_COLUMNS);
}
int numVal=0;
for (String val : values)
{
attributes[numVal].append(numArgs > 0 ? "," : "").append(val.trim());
numVal++;
}
}
for (StringBuilder att : attributes)
{
System.out.println(att);
}
}
}