Java 如何从以&;开头的字符串中删除部分文本*(以结尾)(*

Java 如何从以&;开头的字符串中删除部分文本*(以结尾)(*,java,regex,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. 使用replaceAll执行此操作: Str

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

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

例如:

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.

使用
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("\\&\\*\\(.+?\\)\\(\\*", ""));      

对于字符串操作,我建议使用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());

您可以使用
.replaceAll()

这是一本书

这是正则表达式:

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

这是一个!

你能告诉我这个正则表达式模式吗?@BheshGurung你说得对。我已经删除了grouping@JK它匹配引人注目的
&*(
然后是所有字符(+.),直到下一个
组合)(*
两个注意事项:1.
StringBuilder
是可变的,它将添加的内容存储为字符,这就是为什么建议将其用于字符串连接。2.如果字符串不包含
”&*()
?然后在
sbuild
中不会添加任何内容。1.更正它是可变的。这是我想写的。我将编辑我的答案。2.我知道我们总是有“&*(”。如果不是这样,您可以轻松修复我在答案中编写的代码。
\Q&*(\E.+?\Q)(*\E