我在java中寻找一段代码,我可以在句子或段落中以#符号开头。这是我尝试过的,但它对我不起作用。
String str = "You can use a Matcher to find all matches to a regular repression #myString";
Pattern p = Pattern.compile("\\b(#)\\w*");
Matcher m = p.matcher(str);
while (m.find()) {
String match = m.group();
System.out.println(match);
}
System.out.println("Matches: " + m.matches());
答案 0 :(得分:1)
你在这里不需要regex
。您可以尝试使用String#startsWith
String str = "You can use a Matcher to find all matches to a regular repression #myString";
String[] arr=str.split(" ");
for(String i:arr){
if(i.startsWith("#")){
System.out.println(i);
}
}
答案 1 :(得分:0)
Upto Java 6子字符串是一个O(1)调用,但是它已经从java 7改为O(n)。因此,split将占用你可能不需要的额外数组空间,并且还会复制每个单词(自Java开始) 7)。你可以从左到右扫描你的字符串并继续查找以#开头的单词,这只会复制实际从#开始的单词并且只扫描一次字符串。
String str = "asldfnlsd #dlfsnl sdlfn #ldnf dsf";
int start = -1;
int end = 0;
while (true) {
start = str.indexOf("#", start + 1);
end = str.indexOf(" ", start);
if (start > 0) {
if (end > 0) {
System.out.println(str.substring(start, end));
} else {
System.out.println(str.substring(start));
}
} else {
break;
}
}
答案 2 :(得分:0)
感谢您的解决方案看看这个,您认为这个更有效吗?
String yourString = "hi #how are # you";
Matcher matcher = Pattern.compile("#(\\w+)").matcher(yourString);
while (matcher.find()) {
System.out.println(matcher.group(1));
}