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

Java 从给定标记的第一个到最后一个出现处剪切字符串,java,string,Java,String,假设我们有一个如下格式的字符串: "@tag some text goes here and @tag nobody @tag should care about it @tag" 我想剪切字符串,从第一个标记到最后一个标记(不包括标记)获得完全相同的文本 Java库中是否有一种方法可以让我这样做,或者我必须自己实现它?我没有发现任何有用的方法。您可以使用标准的String方法实现它,如下所示: 使用indexOf 使用lastIndexOf 使用substring 使用replaceAll

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

"@tag some text goes here and @tag nobody @tag should care about it @tag"
我想剪切字符串,从第一个标记到最后一个标记(不包括标记)获得完全相同的文本


Java库中是否有一种方法可以让我这样做,或者我必须自己实现它?我没有发现任何有用的方法。

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

  • 使用
    indexOf
  • 使用
    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.");
}
请注意使用
模式。quote
-这样做是为了安全,以防实际标记包含regex元字符

还要注意正则表达式后面的
+“\\s*”
。它将删除标记后的空格(如果有)


可以使用<代码>索引> <代码>加长和<代码> ListPosixOf >帮助您退出代码,>代码> RePlasy< /Cl> >删除中间的标签。

    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);

您需要以下内容

您有您的字符串

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

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

请查看StringIf
string中的
indexOf()
length()
substring()
,有很多方法可以做到这一点。replaceAll()
将是一个自定义实现,那么是的,您需要自己实现它。哦,当然!我得到了它。我想我错过了这里显而易见的东西。我觉得有点羞愧,因为我发布了这个。。。我想压力太大了。无论如何,谢谢你!不管怎样,请随意回答,这样我就可以将此标记为已接受。谢谢,这就是我一直在寻找的for@devnull问号也可以,尽管我更喜欢把标签后面的空间当作可以修剪的东西。我添加了一个调用
quote
,假设
“@tag”
不是OP的真正标记,在这种情况下,它可能有一些元字符。当我和正则表达式打交道时,我宁愿稳妥,也不愿后悔:-)我想是这样的。谢谢你的解释。这方面的代码太多了。indexOf,lastIndexOf,移除标记的len和substring需要一些数学来移除标记的len,刚才看到了。补充。谢谢
for(int i = 0; i < tags.length; i++)
    tags[i] = tags[i].substring(4);