只查找从特殊字符java开始的第一个单词

时间:2012-06-07 17:15:10

标签: java android regex

我想找到唯一的第一个单词,以java中的字符串中的“#”符号开头。标志和单词之间也不能有空格。

字符串“hi #how is #you”将输出为:

如何

我用regex尝试了这个,但仍然找不到合适的模式。请帮帮我。

感谢。

4 个答案:

答案 0 :(得分:1)

String str ="hi #how are # you";
if (str.contains("#")) {
        int pos = str.indexOf("#");

        while (str.charAt(pos + 1) == ' ')
            pos++;


        int last = str.indexOf(" ", pos + 1);

        str = str.substring(pos + 1, last);
        System.out.println(str);
    }
else{

}

输出如何

答案 1 :(得分:1)

试试这个

replaceFirst("^.*?(#\\S+).*$", "$1");

不完美,但应该有效。

这假设字符串有这样的标记。如果没有,那么您可能需要在提取令牌之前检查它是否与正则表达式匹配:

matches("^.*?(#\\S+).*$");

请注意,此方法将与"#sdfhj"中的"sdfkhk#sdfhj sdf"匹配。

如果要排除此类情况,可以将正则表达式修改为"^.*?(?<= |^)(#\\S+).*$"

答案 2 :(得分:1)

我认为xx#xx是错误的单词。我的确如此(如果不在模式中使用"#(\\w+)"m.group(1)使用m.group(2)

String str ="ab cd#ef #gh";
Pattern pattern=Pattern.compile("(^|\\s)#(\\w+)");
Matcher m=pattern.matcher(str);
if(m.find())
    System.out.println(m.group(2));
else
    System.out.println("no match found");

表示"ab cd#ef #gh"结果 - &gt; gh

表示"#ab cd#ef #gh"结果 - &gt; ab

答案 3 :(得分:0)

你可以试试这个正则表达式:

"[^a-zA-Z][\\S]+?[\\s]"

除非您知道在这种情况下您要寻找的具体角色

"#[\\S]+?[\\s]"