gpt4 book ai didi

java - "Decorating"Java 中带有基于位置的字符的字符串

转载 作者:行者123 更新时间:2023-12-02 05:47:29 24 4
gpt4 key购买 nike

我有一个文本字符串和一个位置对列表,这些位置对定义了我需要“装饰”(或注释)的文本中的范围。例如:

String t1 = "I saw Bob, and also Mary, John's sister.";
int[][] pos1 = {{6, 9}, {20, 39}, {26, 30}};

预期输出:

"I saw [Bob], and also [Mary, [John]'s sister]."

重点是:

  1. 这些位置指的是原始文本。所以添加第一个‘[’后,其余位置就失效了,必须手动更新。

  2. 跨度可能会重叠(例如“约翰”和“玛丽,约翰的妹妹”)。因此,添加“[”后,更新其他位置并非易事。

我想我可以实现这些更新,但它似乎相当复杂,有很多索引簿记和边缘情况。是否有任何现有的类可以执行此任务?

最佳答案

用于工作双支架。

String t1 = "我看到了鲍勃,还有约翰的妹妹玛丽。";

int[][] pos1 = { { 6, 9 }, { 20, 39 }, { 26, 30 }, {26, 30 } };

结果“我看到了[鲍勃],还有[玛丽,[[约翰]]的妹妹]。”

public class Record implements Comparable<Record> {
private int index;
private String value;

public Record(int index, String value) {
this.index = index;
this.value = value;
}

@Override
public int compareTo(Record o) {
return index - o.index;
}

public int getIndex() {
return index;
}

public String getValue() {
return value;
}

public static void main(String[] args) {
String t1 = "I saw Bob, and also Mary, John's sister.";
int[][] pos1 = { { 6, 9 }, { 20, 39 }, { 26, 30 }, { 26, 30 } };

List<Record> records = new ArrayList<>();
for (int i = 0; i < pos1.length; i++) {
records.add(new Record(pos1[i][0], "["));
records.add(new Record(pos1[i][1], "]"));
}

Collections.sort(records);

StringBuilder result = new StringBuilder();
int firstIndex = 0;
for (Record r : records) {
result.append(t1.substring(firstIndex, r.getIndex())).append(
r.getValue());
firstIndex = r.getIndex();
}
result.append(t1.substring(firstIndex));
System.out.println(result);
}
}

关于java - "Decorating"Java 中带有基于位置的字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23910102/

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