gpt4 book ai didi

java - 将字符串合并为结构化字符串

转载 作者:行者123 更新时间:2023-12-01 21:22:48 25 4
gpt4 key购买 nike

如果我有一个像这样的字符串:

FOO BAR YY
- foo bar y
- foo bar x
FOO BAR AA
- foo bar z
- foo bar y

还有一个像这样的字符串:

"FOO BAR YY;- foo bar new entry"

我需要一种通用方法来查找字符串 FOO BAR YY或第一级的类似字符串并连接我的子字符串 -foo bar k在新行中获得此结果:

FOO BAR YY
- foo bar new entry
- foo bar y
- foo bar x
FOO BAR AA
- foo bar z
- foo bar y

是否有一种优雅的方式来查找并插入子字符串?

最佳答案

一种优雅的方法是实现一个解析器(它将原始字符串解析为方便的数据结构)和一个生成器(它创建回字符串)。这是如何做到这一点的粗略草图(使用 Java-7):

public class MyStructure {
private Map<String, List<String>> map = new LinkedHashMap<>();

public MyStructure(String src) {
parse(src);
}

private void parse(String src) {
String curKey = null;
List<String> curList = null;
for(String line : src.trim().split("\n")) {
if(line.startsWith("- ")) {
if(curList == null) {
throw new IllegalStateException("Unexpected line");
}
curList.add(line);
} else {
if(curKey != null) {
map.put(curKey, curList);
}
curKey = line;
curList = new ArrayList<>();
}
}
if(curKey != null)
map.put(curKey, curList);
}

public void add(String key, String value) {
List<String> list = map.get(key);
if(list == null) {
list = new ArrayList<>();
map.put(key, list);
}
list.add(0, value);
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for(Entry<String, List<String>> entry : map.entrySet()) {
sb.append(entry.getKey()).append("\n");
for(String item : entry.getValue())
sb.append(item).append("\n");
}
return sb.toString();
}
}

这里是使用示例:

public static void main(String[] args) {
MyStructure ms = new MyStructure("FOO BAR YY\n" +
"- foo bar y\n" +
"- foo bar x\n" +
"FOO BAR AA\n" +
"- foo bar z\n" +
"- foo bar y");
System.out.println("Before: " + ms);
String toAdd = "FOO BAR YY;- foo bar new entry";
String[] fields = toAdd.split(";", 2);
ms.add(fields[0], fields[1]);
System.out.println("After: " + ms);
}

输出:

Before: FOO BAR YY
- foo bar y
- foo bar x
FOO BAR AA
- foo bar z
- foo bar y

After: FOO BAR YY
- foo bar new entry
- foo bar y
- foo bar x
FOO BAR AA
- foo bar z
- foo bar y

拥有数据结构会好得多,因为它可以方便以后进行其他操作。例如,您可以轻松支持项目删除或重新排序。

关于java - 将字符串合并为结构化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38889235/

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