java - 拆分递归组

标签 java regex

我有一个以下格式的字符串: a,b,c[a,b,c[a]],d

(最终)我想要的结果是

a
b
c.a
c.b
c.c.a
d

关于如何完成这项任务有什么建议吗?

最佳答案

这是使用堆栈的可能解决方案。 (实现了 Avlin Bunk 的评论。)

public static Iterable<String> split(String s) {
    List<String> result = new LinkedList<String>();
    Stack<String> stack = new Stack<String>();
    Pattern pattern = Pattern.compile("[,\\[\\]]|.+?");
    Matcher matcher = pattern.matcher(s);

    stack.push("");
    while (matcher.find()) {
        String token = matcher.group();
        if (token.equals("[")) {
            stack.push("");
        } else if (token.equals("]")) {
            if (! stack.peek().isEmpty())
                result.add(join(".", stack));
            stack.pop();
            stack.pop();
            stack.push("");
        } else if (token.equals(",")) {
            if (! stack.peek().isEmpty())
                result.add(join(".", stack));
        } else {
            stack.pop();
            stack.push(token);
        }
    }
    if (! (stack.isEmpty() || stack.peek().isEmpty()))
        result.add(join(".", stack));
    return result;
}
<小时/>
public static String join(String sep, Iterable<String> it) {
    // Return it[0] + sep + it[1] + sep + .... + it[lastIndex]
    String joined = "";
    boolean first = true;

    for (String s : it) {
        if (first)
            first = false;
        else
            joined += sep;
        joined += s;
    }
    return joined;
}

用法示例:

String text = "a,b,c[a,b,c[a]],d";
for (String s : split(text))
    System.out.println(s);

参见Demo run .

( Same solution in Python , Recursive solution in Python )

关于java - 拆分递归组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21620183/

相关文章:

Javascript .match() 方法输出

c# - 在正则表达式中跳过引号之间的文本

java - Eclipse 自动缩进错误地缩进文件

java - 在 Linux Ubuntu 中安装 Derby 数据库

java - 在 fragment 的 GridView 中显示从 Firebase 下载的图像在打开 fragment 时不断崩溃

java - 为什么Maven的编译器默认是1.5版本?

javascript - 用 & 字符替换搜索输入框中的所有空格

c - 正则表达式查找某个函数的所有调用而不是它的声明

regex - 使用匹配约束进行验证验证-正则表达式

java - 如何在没有 'illegal reflective access' 的情况下在 Java 中设置环境变量?如何使用附加打开?