【问题标题】:Created a nested ArrayList from a string从字符串创建嵌套的 ArrayList
【发布时间】:2015-10-16 20:53:56
【问题描述】:

我希望创建一个 ArrayList,它是嵌套列表的字符串表示的精确副本。 所以给定“[4, 9, 12, [1,2,3], [5,6,10], [11,12]] 列表将是 [4,9,12,[1,2,3 ],[5,6,10],[11,12]].

static int position =0;

public static ArrayList stringToList(String input) {
       List<ArrayList> parsedList = new ArrayList<>();

        while(position < input.length()){
            char element = input.charAt(position++);


            if(element == '['){
                parsedList.add(parseListsToString(input));
            }else if(element==']'){
                break;
            }else if(element==','){}
            else{
                parsedList.add(element);
            }

        }

        return parsedList;
    }

我尝试将 parsedList 声明为:ArrayList(ArrayList)(允许递归)和 ArrayList(Integer)(不允许递归)。而在我提交的当前代码中显然是错误的,因为 parsedList 是一个不正确的返回类型,因为它不是 ArrayList。

我认为我解决问题的方法是正确的,只是我对 ArrayList 的理解不足,这就是我需要帮助的地方。因此,任何建议将不胜感激! 提前致谢!

【问题讨论】:

  • 这可能吗?什么类型的ArrayList 可以同时容纳IntegerList
  • 类似于 ArrayList>。很有可能。
  • you are missing ] 在第一个 '12' 之后。在您的测试字符串中
  • 我已经尝试了 ArrayList> 方法,但我无法向其中添加元素,因为它们不是 ArrayList 类型。前 12 个之后不应有 ']',因为它是最外层数组的一部分。 [4,9,12, [nested], [nested], [nested]],除非你认为那是错误的。如果我将它定义为 ArrayList>,我是否需要以某种方式操作元素以添加它?
  • 我将编辑我的答案

标签: java arrays string list arraylist


【解决方案1】:

您好,我已调试并测试了此解决方案。

String input = "[4, 9, 12, [1,2,3], 2, [5,6,10], [11,12],2,4 ,[5,6]]"; 
List<ArrayList<Integer>> parsedList = new ArrayList<ArrayList<Integer>>();      
    int count = -1;
    boolean newArray = true;

    String element = "";
    for(int i = 1; i < input.length()-1; i++){

        char temp = input.charAt(i); 
        element += temp;

        if(temp == '['){
            parsedList.add(new ArrayList<Integer>());
            count++;
            element = "";
            newArray = false;
        }
        else if(temp == ']'){ 
            parsedList.get(count).add(Integer.parseInt(element.replaceAll("]","")));                    element ="";                
            newArray = true;

        }
        else if(temp == ',' && element.length() == 1 ){

             element = "";  

        }
        else if(temp == ',' && element.length() != 1){

            if(newArray){
                parsedList.add(new ArrayList<Integer>());
                count++;                    
            }

            parsedList.get(count).add(Integer.parseInt(element.replaceAll(",","").replaceAll(" ", "")));
            element ="";

        }

    }

结果是[[4],[9],[12],[1,2,3],[2],[5,6,10],[11,12],[2],[ 4],[5,6]]。 所以基本上你有一个整数数组的数组。

【讨论】:

  • 它不适用于多维数组......另外,为什么你将每个数字都放在一个列表中?
  • 它回答了这个问题。
  • 嗯,是的。 @bigkat79 今天再次发布了这个问题。同名。那里的问题有点不同,但确实有点不同。但是他已经删了……
【解决方案2】:

我之前发布了我的解决方案,但它消失了:

private static List<Object> toArray(final String str) {
    return Main.toArray(new StringBuilder(str));
}

private static List<Object> toArray(final StringBuilder data) {
    final List<Object> result = new ArrayList<Object>();

    if (data.charAt(0) == '[') {
        data.delete(0, 1);
    }

    String value = "";
    while (data.length() > 0) {
        final char element = data.charAt(0);
        data.delete(0, 1);

        if (element == '[') {
            result.add(Main.toArray(data));
        } else if (element == ']') {
            if (!value.isEmpty()) {
                result.add(value);
                value = "";
            }
            break;
        } else if (element == ',') {
            if (!value.isEmpty()) {
                result.add(value);
                value = "";
            }
        } else if (element != ' ') {
            value += element;
        }
    }

    if (!value.isEmpty()) {
        result.add(value);
    }

    return result;
}

【讨论】:

    猜你喜欢
    • 2021-08-22
    • 1970-01-01
    • 2016-02-12
    • 2016-01-24
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多