从字符串中删除双标签

时间:2016-08-31 04:50:44

标签: java regex

我的字符串看起来像这样:

<start> <start> some sentence <stop> is a sentence <stop>

我如何使这些字符串像这样:

<start> some sentence is a sentence <stop>

到目前为止,我正在使用正则表达式删除双重启动

string.replace("<start> <start>","<start>");

但是我仍然坚持要删除中间停止标签。

4 个答案:

答案 0 :(得分:2)

可以这样做replaceFirstString类方法,它取代了该字符串的第一个子字符串,该子字符串与给定的替换项匹配给定的正则表达式。

String finalResult=string.replaceFirst("<start>", "" ).replaceFirst("<stop>", "" )

答案 1 :(得分:0)

如果您确定开始和停止标签中的开始和停止标签结尾。您也可以手动对它们进行硬编码,并删除其间的所有标签。

public class myclass {
    public static void main(String[] args) {
        String x = "<start> <start> some sentence <stop> is a sentence <stop>";
        String finalResult="<start>"+x.replaceAll("<[^>]+>", "")+"<stop>";
        System.out.println(finalResult);
    }
}

答案 2 :(得分:0)

一种方法是,您可以删除所有实例,然后按照您想要的方式修复String:

private static final String START = "<start>";
private static final String STOP = "<stop>";

private boolean containsKeywords(final String string) {
    return string.contains(START) ||
        string.contains(STOP);
}

private String stripAllStartStop(final String string) {
    string.replaceAll(START, "");
    string.replaceAll(STOP, "");
}

private addStartStop(final String string) {
    StringBuilder sb = new StringBuilder();
    sb.add(START);
    sb.add(string);
    sb.add(STOP);
    return sb.build();
}  

/**
 * Cleanup the sequence of START and STOP tokens in a String.
 */
public String sanitizeString(final String string) {
    if (containsKeywords(string)) {
        return addStartStop(stripAllStartStop(string));
    }
}

更好,更清晰,更具可扩展性的方式类似,但使用StrSubstitutor使用查找Map进行替换。

答案 3 :(得分:0)

您想要移除的停靠点由右侧和左侧的空格包裹使用,作为删除您需要的空格的标准..

string.replace(" <stop> ","");