为了账号安全,请及时绑定邮箱和手机立即绑定

将格式化的字符串解析为数组

将格式化的字符串解析为数组

慕妹3242003 2021-07-02 10:07:42
我正在使用以这种格式接收字符串的 InputSteam。[[1,3,4],[43,6,3],[4,2,5]]我将如何将其解析为可用的 java 数组?
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

这是在不使用第 3 方库的情况下解析该文本的一种方法。


public static int[][] parse(String text) {

    if (! text.startsWith("[[") || ! text.endsWith("]]"))

        throw new IllegalArgumentException("Invalid text: " + text);

    String[] subTexts = text.substring(2, text.length() - 2).split("\\],\\[");

    int[][] result = new int[subTexts.length][];

    for (int i = 0; i < subTexts.length; i++) {

        String[] valueTexts = subTexts[i].split(",");

        result[i] = new int[valueTexts.length];

        for (int j = 0; j < valueTexts.length; j++)

            result[i][j] = Integer.parseInt(valueTexts[j]);

    }

    return result;

}

测试


System.out.println(Arrays.deepToString(parse("[[1,3,4],[43,6,3],[4,2,5]]")));

输出


[[1, 3, 4], [43, 6, 3], [4, 2, 5]]


查看完整回答
反对 回复 2021-07-07
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

这是我的尝试(虽然有点冗长)。该程序int[][]在每种情况下都使用以下三个输入字符串创建了- 单独尝试时:


"[[1,3,4],[43,6,3],[4,2,5]]"

"[[]]"

"[[],[1,2,3],[0]]"

程序代码:


import java.util.*;

import java.util.stream.*;

public class ArrayParsing {

    private final static String input = "[[1,3,4],[43,6,3],[4,2,5]]";

    private final static String open = "[";

    private final static String open2 = "[[";

    private final static String close = "]";

    private final static String close2 = "]]";

    private final static List<int []> outerContent = new ArrayList<>();

    public static void main(String [] args) {

        String content = "";

        String token = "";

        boolean flag = false;

        for (int i = 0; i < input.length(); i++) {

            token = input.substring(i, i+1);

            if (token.equals(open) || token.equals(open2)) {

                content = "";

                flag = false;

            }

            else if (token.equals(close) && !flag) {

                buildArray(content);

                flag = true;

            }

            else {

                content = content.concat(token);

            }

        }

        int [][] result = outerContent.toArray(new int[outerContent.size()][]);

        System.out.println(Arrays.deepToString(result));

    }

    private static void buildArray(String in) {

        int [] intArray = new int[0];   

        if (in.trim().length() > 0) {

            String [] elements = in.split(",");

            intArray = Arrays.stream(elements)

                             .mapToInt(s -> Integer.parseInt(s))

                             .toArray();

        }

        outerContent.add(intArray);

    }

}


查看完整回答
反对 回复 2021-07-07
  • 2 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信