如果我想沿着一个字符串拉两个字符(一般)之间的所有子串,我该怎么做? 我也希望保留第一个匹配的字符,但不保留第二个字符。
所以,例如,如果我想要将字符保留在#
char和下一个空格之间或另一个char的下一个字符(在这种情况下再次#
,但可以是任何东西)和我有一个字符串,说:"hello i'm #chilling#likeAVillain but like #forreal"
我如何得到,比如一组[#chilling, #likeAVillain, #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);
答案 0 :(得分:3)
这个正则表达式#\\w+
似乎可以满足您的需求。它会在其后面找到#
和所有字母数字字符。由于空格不属于\\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
答案 1 :(得分:0)
public static void main(String[] args) throws Exception{
String s1 = "hello i'm #chilling#likeAVillain but like #forreal";
String[] strArr = s1.split("\\#");
List<String> strOutputArr = new ArrayList<String>();
int i = 0;
for(String str: strArray){
if(i>0){
strOutputArray.add("#" + str.split("\\s+")[0]);
}
i++;
}
System.out.println(strOutputArray.toString());
}