在java中以#符号开头的句子中查找字符串

时间:2014-08-07 09:05:33

标签: java

我在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());

3 个答案:

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

        }