繁体   English   中英

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

[英]How can I get a various strings inside different curly braces?

想象一下我有一个这样的字符串:

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 ,然后使用某种正则表达式来获取花括号内的内容。 有没有更简单、更优雅的方法来做到这一点? 谢谢先进

假设它们都以相同的方式间隔并且始终遵循带括号的规则:

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

automata中的每个List<Integer>都是一个包含在奇异 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("[{}]",""));
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM