如果以& *开头(并以...结尾),如何从字符串中删除部分文本(*

时间:2014-08-17 07:03:35

标签: java regex

我有一个很长的字符串。在字符串的某处,有一部分以&*(开头,然后有一些文字,以)(*结尾。

如何在开头和结尾删除此文本以及特殊符号?

示例:

Bla bla bla &*( asd asd asd )(* bla bla bla. Yadda yadda yadda &*( akls lkja )(* yadda.

我想输出

Bla bla bla bla bla bla. Yadda yadda yadda  yadda.

3 个答案:

答案 0 :(得分:4)

使用replaceAll要执行此操作:

    String s ="Bla bla bla &*( asd asd asd )(* bla bla bla. Yadda yadda yadda &*( akls lkja )(* yadda.Bla bla bla &*( asd asd asd )(* bla bla bla. Yadda yadda yadda &*( akls lkja )(* yadda.";
    System.out.println(s.replaceAll("\\&\\*\\(.+?\\)\\(\\*", ""));      

答案 1 :(得分:1)

您可以使用.replaceAll()

String replaced = "Bla bla bla &*( asd asd asd )(* bla bla bla. Yadda yadda yadda &*( akls lkja )(* yadda."
                      .replaceAll("\\Q&*(\\E.+?\\Q)(*\\E", "");

这是online code demo

这是正则表达式:

\Q&*(\E.+?\Q)(*\E
  • \Q开始引用文字序列。
    • &*(文字字符序列"& *("
  • \E结束
  • .+?匹配多个字符,尽可能少(懒惰)
  • \Q开始引用文字序列。
    • )(*字面字符序列")(*"
  • \E结束

这是regex demo

答案 2 :(得分:0)

对于字符串操作,我建议使用StringBuilder。 StringBuilder是可变的,不会为每个操作创建一个新字符串

您可以尝试以下操作:

final String START_INDEX = "&*(";
final String END_INDEX = ")(*";
String str = "Bla bla bla &*( asd asd asd )(* bla bla bla. Yadda yadda yadda &*( akls lkja )(* yadda.";

StringBuilder sbuild = new StringBuilder(str);
for(int start = sbuild.indexOf(START_INDEX); start != -1;){
    int end = sbuild.indexOf(END_INDEX);
    sbuild.replace(start, end + END_INDEX.length(), "");
    start = sbuild.indexOf(START_INDEX);
}

System.out.println(sbuild.toString());