gpt4 book ai didi

java - 我如何在java中递归地重新排列字符串

转载 作者:行者123 更新时间:2023-11-29 09:06:16 25 4
gpt4 key购买 nike

我正在尝试从单行字符串中重新排列字符串的内容

(file).DS_Store(~file)(folder)server(file).DS_Store(~file)(folder)test1(~folder)(folder)test2(~folder)(folder)test3(file).DS_Store(~file)(folder)test4(file).DS_Store(~file)(folder)test5(file).DS_Store(~file)(file)item.txt(~file)(~folder)(~folder)(~folder)(~folder)(file)text.txt(~file)

像这样的多行字符串

(file).DS_Store(~file)
(folder)client
(folder)test6(~folder)
(folder)test7
(folder)test9
(folder)test10
(file)itemClient(~file)
(~folder)
(~folder)
(~folder)
(folder)test8(~folder)
(~folder)
(file)test.txt(~file)
(file)text.txt(~file)

我知道递归对我有帮助,但是当我尝试编写递归函数时,它只检查第一个定界符并停止,不检查字符串的其余部分。这是我正在使用的代码。

public String getFileStructure(String list, int level){
String str = list;
String ret = "";
String fileStart = "(file)";
String fileEnd = "(~file)";
String folderStart = "(folder)";
String folderEnd = "(~folder)";

if (!list.isEmpty()) {
for (int i = 0; i < level; i++) {
ret+="\t";
}
if (str.startsWith(folderStart)) {
ret+= "[" + str.substring(str.indexOf(folderStart)+8, str.indexOf(folderEnd)) + "]\n";
getFileStructure(str, level + 1);
} else {
ret+= str.substring(str.indexOf(fileStart)+6, str.indexOf(fileEnd));
}
}
return ret;
}

但它只返回

.DS_Store
.DS_Store

最佳答案

编辑:

我原来的回答是完全错误的。

经过进一步考虑,我认为在这种情况下递归不是一个好主意。为了使递归工作,无论何时遇到文件夹开始,您都必须找到匹配的文件夹结束,然后以文件夹的内容作为输入递归调用该函数。但是,为了找到哪个 (~folder) 标记当前文件夹的结尾,您必须扫描文件夹的所有内容。在执行此操作时,您已经可以为文件夹的竞争构造输出,因此递归调用没有意义。

例如,假设您有结构 (folder)A(file)a(~file)(folder)B(file)b(~file)(~folder)(folder)C(~folder) (~文件夹)(文件夹)D(~文件夹)。我用粗体标记了文件夹 A 的末尾。为了找到它,您必须维护一个计数器。每次找到 (folder) 字符串都会增加计数器,每次找到 (~folder) 字符串都会减少它。只有当计数器回到启动文件夹 A 之前的值时,您才到达该文件夹的末尾。在遍历字符串时,您可以打印文件夹 A 的所有内容,使用计数器来决定缩进需要多少个制表符。

关于java - 我如何在java中递归地重新排列字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14905084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com