Java 如何获取发生在两个字符之间的所有子字符串?
如果我想沿着一个字符串拉取两个字符(常规)之间的所有子字符串,我会怎么做? 我还想保留匹配的第一个字符,但不保留第二个字符 例如,如果我想将字符保留在一个Java 如何获取发生在两个字符之间的所有子字符串?,java,regex,string,Java,Regex,String,如果我想沿着一个字符串拉取两个字符(常规)之间的所有子字符串,我会怎么做? 我还想保留匹配的第一个字符,但不保留第二个字符 例如,如果我想将字符保留在一个字符和下一个空格或下一个字符之间(在本例中,又是一个字符,但可以是任何字符),我有一个字符串,说:“你好,我很冷#像一个坏蛋,但像#forreal” 比如说,我怎样才能得到一套[#令人毛骨悚然,#像个恶棍,#真实的] 我遇到了困难,因为出现了“任择/或结束”子字符串的情况-我希望子字符串以开头,并在第一次出现另一个或空白之前结束(如果两者都找不
字符和下一个空格或下一个字符之间(在本例中,
又是一个字符,但可以是任何字符),我有一个字符串,说:“你好,我很冷#像一个坏蛋,但像#forreal”
比如说,我怎样才能得到一套[#令人毛骨悚然,#像个恶棍,#真实的]
我遇到了困难,因为出现了“任择/或结束”子字符串的情况-我希望子字符串以
开头,并在第一次出现另一个
或空白之前结束(如果两者都找不到,则以字符串结尾)
在sudocode中放入最简单的代码:
for every String W between [char A, either (char B || char C)) // notice [A,B) - want the
//first to be inclusive
Set.add(W);
publicstaticvoidmain(字符串[]args)引发异常{
String s1=“你好,我#冷#像个恶棍但像#真的”;
字符串[]strArr=s1.split(“\\\\”);
List strOutputArr=new ArrayList();
int i=0;
用于(字符串str:strArray){
如果(i>0){
strOutputArray.add(“#”+str.split(“\\s+”)[0]);
}
i++;
}
System.out.println(strOutputArray.toString());
}
这个正则表达式似乎可以满足您的需要。它将查找#
及其后面的所有字母数字字符。因为空格不是\\w
的一部分,所以它不会包含在您的匹配中
String s = "hello i'm #chilling#likeAVillain but like #forreal";
Pattern p = Pattern.compile("#\\w+");
Matcher m = p.matcher(s);
while (m.find())
System.out.println(m.group());
输出:
#chilling
#likeAVillain
#forreal
#forreal
不在#
之间。为什么会出现在你的结果中?为什么你不问问你是如何从tweet中获得标签标记的?标签是我所能做的最好的比较,我需要的并不一定是它和Pshemo-抱歉,我猜第三个终止条款将是字符串的结尾,它不会删除“#”s吗?哦。。添加了“#”到它。你为什么逃避#
?在这篇文章和你的预编辑文章之间,我想我得到了我需要的-谢谢@gadu如果我以前的版本是您需要的,那么您应该在正则表达式中包含转义机制,以防您希望使用正则表达式元字符,如$
,^
,*
,等等。要生成简单的文字,您可以用“\\Q”+yourCharacter+“\\E”
包围它们\Q
和\E
将使它们之间的每个字符都成为文字。
#chilling
#likeAVillain
#forreal