找到单词java后删除所有文本

时间:2014-02-12 09:09:42

标签: java regex string

我需要在某些情况下剪切字符串的尾部 - 我用indexOf和substring完成了这个,但它减慢了我的代码((我已经考虑了正则表达式,但这个尾部只有类似的开头 - 这不是“稳定的“字  例如,我有这样的字符串

 aaaaa bbb cc (bb) (r-1hh) 

我需要一个结果

  aaaaa bbb cc (bb)

但也可能有这样的字符串

aaaaa bbb cc (bb) (r3-34fff)

 aaaaa bbb cc (bb) [tagBB- na]

所以,问题是 - 我可以使用正则表达式找到尾部索引吗?

另一个问题 - IndexOf或Substring在java中使用正则表达式吗?

4 个答案:

答案 0 :(得分:1)

您可以编写一个正则表达式,其中包含)以外的任何内容,并以)结尾,因此您可以避免在第一个)之后匹配任何内容。

答案 1 :(得分:1)

如何查找正则表达式匹配位置:

Pattern p = Pattern.compile("i.*t");
String s = "my input string";
Matcher m = p.matcher(s);
if (m.find()) {
    System.out.println("match begins at " + m.start()); // 3
    System.out.println("match ends at " + m.end()); // 11
} else {
    System.out.println("no match found");
}

但是你可以这样删除尾随文字:

String res = s.replaceFirst("^(.* input).*", "$1");
System.out.println("'" + res + "'");

或者使用完全匹配而不会以这种方式转义每个特殊字符:

String res = s.replaceFirst("^(.* " + Pattern.quote("^something$wierd^") + ").*", "$1");
System.out.println("'" + res + "'");

答案 2 :(得分:0)

您可以使用$来匹配字符串的结尾,然后找到尾部的常用模式。它总是位于[]或()之间的字母数字/短划线/空格字符吗?那是你的模式。

然后,只需在初始字符串的开头和使用尾部模式找到的子字符串的开头之间对所有内容进行子字符串。

答案 3 :(得分:0)

你问:

可以使用正则表达式来查找字符串的索引吗?

您可以使用模式和匹配器来实现此目的。 刚注意到其他人已对此发表评论,所以我不会举一个例子。

String方法IndexOf或Substring是否在Java中使用正则表达式?

不,java中的String使用字符解析。您可以在此处查看Javadoc或源代码以获取更多详细信息。 您可以非常轻松地使用Java实现此功能,此示例可能类似于您现有的实现:

public String truncate(String str, String tail) {
  int lengthOfTail = tail.length();
  int indexOfTail = str.indexOf(tail);
  return str.substring(0, indexOfTail + lengthOfTail);
}

(为清晰起见,省略了错误处理)