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