String text;
System.out.println(text);
在控制台中它看起来像这样:
The US.....................................
Illinois Commerce .......... ..............
...........................................
..........................Illinois Commerce
我需要摆脱第二个子串Illinois Commerce
这就是我的尝试:
text = text.replaceAll("(?:Illinois Commerce:.*?){2}", "");
我得到java.lang.ArrayIndexOutOfBoundsException: 1
答案 0 :(得分:5)
你可以试试这个:
text = text.replaceFirst("(Illinois Commerce(?s).*?)Illinois Commerce", "$1");
答案 1 :(得分:3)
这应该是假设它跟随字符串的空格或结尾。
text = text.replaceAll("Illinois Commerce(?= ?$)", "");
或者以下内容适用于此案例。
text = text.replaceAll("\bIllinois Commerce\s*$", "");
答案 2 :(得分:2)
我不会使用正则表达式。我会做的是:
"Illinois Commerce"
index + 1
获取子字符串直到结束。"Illinois Commerce"
。这将确保我不会替换1 st 的出现,因为它不会在此子字符串中完全可用。这就是代码的样子:
int index = text.indexOf("Illinois Commerce");
String result = text.substring(0, index + 1) +
text.substring(index + 1).replace("Illinois Commerce", "");
System.out.println(result);
text.substring(0, index + 1)
会将字符串带到第一个I
的{{1}}。
Illi....
将从第一个text.substring(index + 1)
的{{1}}开始,直到字符串结束。因此,唯一要替换的字符串是第二次出现。
答案 3 :(得分:1)
由于只有两次出现,lastIndexOf
可能比这种情况下的正则表达式好。
无论如何,以下是regx和lastIndexOf
方法。
public static void main(String[] args) {
String test = "The US.....................................\n" +
"Illinois Commerce .......... ..............\n" +
"...........................................\n" +
"..........................Illinois Commerce \n";
String toFind = "Illinois Commerce";
System.out.print("regex\n");
System.out.println(test.replaceAll( "(?s)^(.*)"+toFind+"(.*)$", "$1$2" ));
System.out.print("\nlastIndexOf\n");
int start = test.lastIndexOf(toFind);
System.out.println( test.substring( 0, start)
+ test.substring(start+toFind.length()));
}