从给定标记的第一个到最后一个出现处剪切字符串

时间:2014-04-07 17:52:35

标签: java string

假设我们有一个格式如下的字符串:

"@tag some text goes here and @tag nobody @tag should care about it @tag"

我想剪切字符串并从第一个标记到最后一个标记(不包括标记)获得完全相同的文本。

Java库中是否有一个允许我这样做的方法,还是我必须自己实现它?我没有找到任何有用的东西。

3 个答案:

答案 0 :(得分:1)

您可以使用标准String方法实现它,如下所示:

  • 使用@tag
  • 找到第一次出现indexOf的位置
  • 使用@tag
  • 找到上次出现的lastIndexOf的位置
  • 使用substring
  • 剪切标记之间的子字符串
  • 使用replaceAll
  • 删除标签

以下是编码方式:

String str = "@tag some text goes here and @tag nobody @tag should care about it @tag";
String tag = "@tag";
int start = str.indexOf(tag);
int end = str.lastIndexOf(tag);
if (start >= 0 && end > start) {
    String res = str
        .substring(start, end)
        .replaceAll(Pattern.quote(tag)+"\\s*", "")
        .trim();
    System.out.println("Result: '"+res+"'");
} else {
    System.out.println("Tag not found.");
}

请注意使用Pattern.quote - 这是为了安全起见,以防您的实际标记包含正则表达式元字符。

还请注意正则表达式后的+"\\s*"。它会删除标记之后的空格(如果有的话)。

Demo on ideone

答案 1 :(得分:1)

您可以使用indexOf加长度和lastIndexOf来帮助您,replaceAll摆脱中间的标签。

    String s = "@tag some text goes here and @tag nobody @tag should care about it @tag";
    String searchString = "@tag";
    int begin = s.indexOf(searchString) + searchString.length();
    int end = s.lastIndexOf(searchString);
    String between = s.substring(begin, end);
    String withoutSearchString = between.replaceAll(searchString, "");
    System.out.println(withoutSearchString);

答案 2 :(得分:1)

您需要以下内容。

你的字符串是

String string = "@tag some text goes here and @tag nobody @tag should care about it @tag";

将其拆分为由@tag

分隔的数组
String[] tags = string.split("@tag");

遍历每个数组并删除前4个字符(@tag)

for(int i = 0; i < tags.length; i++)
    tags[i] = tags[i].substring(4);

希望这有帮助。如果您阅读String class

,有很多方法可以做到