(JAVA)将数组切割成语句并将其保存在新数组的对象中?

时间:2017-12-09 20:37:04

标签: java object arraylist contains cut

我需要一个将一维数组切割成二维数组的程序。 但是:第二维不能是另一个数组,而是新对象。

我有两个输入:

  • String Array 1包含完整的命令语句(包括args和values)
  • String Array 2包含所有有效的arg-Names

我想要一个输出:

  • 包含arg +值的String数组:此数组的所有元素都是“cuttedStatement”类的对象

“cuttedStatement”类的这些对象可以同时包含: (参数+他的价值)或(只有参数)。所以有或没有价值的论证都是有效的!

看一下描述图片: enter image description here

这是我的CutterPrgm代码:

import java.util.*;


public class Main {

    public static void main(String[] args) {

        String[] statement = {"-in", "FILENAME", "-out", "FILENAME" , "-keep" , "-typ", ".avi", "-status"};
        String[] validArgs = {"-in", "-out", "-keep", "-typ", "-status"};

        ArrayList<CuttedStatement> cuttedOutputList = new ArrayList<>();


            for (int i = 0; i < statement.length; i++) {
                boolean contains = Arrays.asList(validArgs).contains(statement[i+1]);
                if(contains) {
                    CuttedStatement obj[i] = new CuttedStatement(statement[i]);
                    cuttedOutputList.add(obj);
                }else {
                    CuttedStatement obj[i] = new CuttedStatement(statement[i],statement[i+1]);
                    cuttedOutputList.add(obj);
                }
            }

    }

}

这是我的CuttedStatement-class:

public class CuttedStatement {

    String argument;
    String value;
    boolean hasValue;

    public CuttedStatement(String argument) {
        this.argument = argument;
        this.hasValue = false;
    }

    public CuttedStatement(String argument, String value) {
        this.argument = argument;
        this.value = value;
        this.hasValue = true;
    }
}

所以现在我的问题:正如你猜测的那样,程序不起作用。

我的第一个问题是“obj [i]”对象。我想在每次新迭代时使用index = i创建一个新的“obj”,以便你拥有:Array = {obj1,obj2,obj3,obj4等...}。这看起来不起作用。

也许你知道我的解决方案或有一些提示。希望如此。非常感谢您的帮助,欢迎各方面的帮助! :d

2 个答案:

答案 0 :(得分:0)

public class Company
{
   public int CompanyId { get; set; }
   public string Name { get; set; }
   public string Address { get; set; }
   public string Email { get; set; }
   public string Url { get; set; }
   //...
}

public class HeadOffice : Company
{
   public int HeadOfficeId { get; set; }
   public virtual List<BranchOffice> BranchOffice { get; set; } = new List<BranchOffice>();
}

public class BranchOffice : Company
{
   public int BranchOfficeId { get; set; }
   public virtual HeadOffice HeadOffice { get; set; }
}

该程序输出 [(-in = FILENAME),( - out = FILENAME),( - keep),( - type = .avi),( - status)]

答案 1 :(得分:0)

我几乎没有修改你的逻辑。这里Map将包含你需要的东西。使用地图播放最终输出。

String[] statement = { "-in", "FILENAME", "-out", "FILENAME", "-keep", "-typ", ".avi", "-status" };
        String[] validArgs = { "-in", "-out", "-keep", "-typ", "-status" };
        Map<String, String> m = new HashMap<String, String>();
        String key = null;
        for (int i = 0; i < statement.length; i++) {
            boolean contains = false;
            if(i + 1<statement.length){
                contains = Arrays.asList(validArgs).contains(statement[i + 1]);
            }
            if (contains) {
                m.put(key, statement[i]);
            } else {
                key = statement[i];
                m.put(key, "");
            }
        }