8

如果我有两个字符串..说

string1="Hello dear c'Lint and dear Bob"

string2="dear"

我想比较字符串删除第一次出现的匹配子字符串..
上述字符串对的结果是:

Hello c'Lint and dear Bob

这是我编写的代码,它接受输入并返回匹配的出现:

System.out.println("Enter your regex: ");
BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));

String RegEx = bufferRead.readLine();
Pattern pattern = Pattern.compile(RegEx);
System.out.println("Enter input string to search: ");
bufferRead = new BufferedReader(new InputStreamReader(System.in));
Matcher matcher = pattern.matcher(bufferRead.readLine());

boolean found = false;
while (matcher.find()) {
    System.out.println("I found the text:\"" + matcher.group() +
            "\" starting at index \'" +
            matcher.start() + 
            "\' and ending at index \'" + 
            matcher.end() + 
            "\'");
}
4

1 回答 1

20

您可以使用

string result = string1.replaceFirst(Pattern.quote(string2), "");

或者您可以完全避免使用正则表达式:

int index = string1.indexOf(string2);
if (index == -1)
{
    // Not found. What do you want to do?
}
else
{
    String result = string1.substring(0, index) + 
                    string1.substring(index + string2.length());
}

index您可以使用并且string2.length()非常轻松地在此处报告该地区。当然,如果您希望能够匹配正则表达式模式,您应该使用它们。

编辑:正如另一个答案中所述,这两个都"dear"将从"and_dear_Bob"离开中删除"and__Bob"- 下划线代表空格。所以你最终会在单词之间有两个空格。它也不强制匹配是一个完整的单词。它完全符合您的描述,但它并没有给您显然想要的结果。

编辑: 代码输出的首选:Hello c'Lint and dear Bob Hello 和 c'Lint 在中间有两个空格字符。虽然这段代码:

string result = string1.replaceFirst(Pattern.quote(string2+" "), ""));

摆脱额外的空白字符。

于 2013-01-26T08:34:58.640 回答