我想找到唯一的第一个单词,以java中的字符串中的“#”符号开头。标志和单词之间也不能有空格。
字符串“hi #how is #you”将输出为:
如何
我用regex尝试了这个,但仍然找不到合适的模式。请帮帮我。
感谢。
答案 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]"