Java替换多个子字符串(基于索引)

时间:2016-05-19 13:35:47

标签: java string string-parsing

我有一个像

这样的字符串
'John is a student. He is also a researcher. He is also a human.'

我有John和第一He的开始和结束索引。有没有办法用x同时替换这些子串。请注意,我不应该替换第二个He,因为我只有第一个He的索引。

我们显然可以遍历字符串,只要指针不在子字符串窗口中并且放置x就会复制。但是,还有比这更好的方法吗?

另请注意,索引不重叠。

4 个答案:

答案 0 :(得分:3)

从最终替换是最佳解决方案。

public class NE {
     public Integer startIndex;
     public Integer endIndex;
}

public class CustomComparator implements Comparator<NE> {
    public int compare(NE n1, NE n2) {
        return n1.startIndex.compareTo(n2.startIndex);
    }
}

ArrayList<NE> NEList = getIndexes();
Collections.sort(NEList, ner.new CustomComparator());

String finalString = 'John is a student. He is also a researcher. He is also a human.';
for(int i=NEList.size()-1;i>=0;i--){
    NE ne = ner.new NE();
    ne = NEList.get(i);
    finalString = new StringBuilder(finalString).replace(ne.startIndex, ne.endIndex, 'x').toString();
}
System.out.println(finalString);

致谢:@AndyTurner

答案 1 :(得分:0)

试试这个:

String s="John is a student. He is also a researcher.";

        int beginIndex=s.indexOf("He");
        s=s.substring(0, beginIndex)+"x"+s.substring(beginIndex+2,s.length());

输出:约翰是一名学生。 x也是研究员。

答案 2 :(得分:0)

我不知道如何用索引来改变它们。但是,嘿,你可能首先通过搜索John和He的子串来找到索引。所以你可以跳过它并使用字符串静态方法replaceAll

String test = "John is a student. He is also a researcher.";
System.out.println(test.replaceAll("(John)|(He)", "x"));

事实上,您正在检查(John)|(He)(&#34; John&#34;或#34; He&#34;)是否在字符串测试中。如果是这样,他们将被"x"取代。

replaceAll返回对新String对象的引用,如下所示:

x是一名学生。 x也是研究员。

答案 3 :(得分:0)

您可以使用与要替换的单词长度相同的占位符。然后用x替换占位符并获取结果。

 String s = "John is a student. He is also a researcher.";
 int firstStart = 0,firstEnd =4,secondStart=19,secondEnd=21;

 String firstPlaceholder = String.format("%"+(firstEnd - firstStart )+"s", " ").replaceAll(" ", "x");
 String secondPlaceholder = String.format("%"+(secondEnd -secondStart)+"s", " ").replaceAll(" ", "x");

 String result = new StringBuilder(s).replace(firstStart, firstEnd, firstPlaceholder)
                                        .replace(secondStart, secondEnd, secondPlaceholder)
                                        .toString().replaceAll("x[x]+", "x");
 System.out.println( result);

输出:

x is a student. x is also a researcher.
希望这可以提供帮助。