Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理命令行参数_Java_Parameters_Main - Fatal编程技术网

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" 以此类推,即每个字符串都有属性,属性用逗号

我们有一个调用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"
以此类推,即每个字符串都有属性,属性用逗号分隔,字符串用空格分隔(我在下一行提到过,但实际值将用空格分隔)

根据上述输入值,我需要为本地属性赋值,如下所示:

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);
        }
    }
}