Java 如何在不同的花括号内获得不同的字符串?

Java 如何在不同的花括号内获得不同的字符串?,java,Java,假设我有一根这样的线: String str = "{} {2,3,4} {1} {6} {}"; array[0] = NULL, array[1] = "2,3,4", array[2] = "1", array[3] = "6", array[4] = NULL 我想得到一个数组,里面填充了花括号中的信息,所以这个数组看起来像这样: String str = "{} {2,3,4} {1} {6} {}"; array[0] = NULL, array[1] = "2,3,4", a

假设我有一根这样的线:

String str = "{} {2,3,4} {1} {6} {}";
array[0] = NULL, array[1] = "2,3,4", array[2] = "1", array[3] = "6", array[4] = NULL
我想得到一个数组,里面填充了花括号中的信息,所以这个数组看起来像这样:

String str = "{} {2,3,4} {1} {6} {}";
array[0] = NULL, array[1] = "2,3,4", array[2] = "1", array[3] = "6", array[4] = NULL
我在考虑可能拆分初始字符串
str
,然后使用某种正则表达式来获取大括号中的内容。 有没有更简单、更优雅的方法?
在advanced

中感谢您,假设它们的间距相同,并且始终遵循带括号的规则:

public List<Integer> parseList(String list) {
    Stream.of(list.split(",")).map(Integer::parseInt).collect(Collectors.toList());
}

List<List<Integer>> automata = Stream.of(str.split("\\s")) //split into groups of braces
    .map(s -> s.substring(1, s.length() - 2)) //remove braces
    .map(Example::parseList) //map "1,2,3" into a List of [1,2,3]
    .collect(Collectors.toList());
公共列表解析列表(字符串列表){
Stream.of(list.split(“,”).map(Integer::parseInt).collect(Collectors.toList());
}
List automata=Stream.of(str.split(\\s))//拆分为大括号组
.map(s->s.substring(1,s.length()-2))//删除大括号
.map(示例::parseList)//将“1,2,3”映射到[1,2,3]的列表中
.collect(Collectors.toList());
自动机
中的每个
列表
都是单个DFA/NFA中涉及的整数列表。不需要正则表达式,并且花了大约2分钟来编写(对@JamMaster所说的内容点头)


这就是说,在DFA的真正精神下,您可以编写一个逐字符的解析器,它可以在O(n)时间内通过字符串工作。如果您同时执行这两项操作,则可能值得额外奖励。

使用正则表达式进行非常少的字符串操作。 我相信它工作得更快


        Pattern pattern = Pattern.compile("\\{(.*?)\\}");
        Matcher matcher = pattern.matcher(str);

        while (matcher.find()) {
            System.out.println("->" + matcher.group().replaceAll("[{}]",""));
        }

出于好奇,
str
从何而来?一个包含DFA/NFA描述的文件@RogueI认为这种情况下的正则表达式会让你头疼。我认为编写一个简单的解析器更容易。请看一个称为递归下降解析器的东西,只是为了记录:我不会使用null,而只是使用空字符串“”“空括号。空值始终是遇到空指针异常的前50%!非常感谢你!我会尝试一下你的答案,肯定会看看@JamMaster说了什么!非常有用的解决方案@Jigar Gajjar我真的没有想到分组和替换。非常感谢。