Dev*_*ngh 4 java string extraction
我得到以下字符串:
String line = "#food was testy. #drink lots of. #night was fab. #three #four";
Run Code Online (Sandbox Code Playgroud)
我想借此#food
#drink
#night
#three
和#four
从它.
我试过这段代码:
String[] words = line.split("#");
for (String word: words) {
System.out.println(word);
}
Run Code Online (Sandbox Code Playgroud)
但它给food was testy
,drink lots of
,nigth was fab
,three
和four
.
Ora*_*ace 13
split
只会在发现#的位置切断整个字符串.这解释了你目前的结果.
您可能想要提取每个字符串的第一个单词,但执行任务的好工具是RegEx
在这里你如何实现它:
String line = "#food was testy. #drink lots of. #night was fab. #three #four";
Pattern pattern = Pattern.compile("#\\w+");
Matcher matcher = pattern.matcher(line);
while (matcher.find())
{
System.out.println(matcher.group());
}
Run Code Online (Sandbox Code Playgroud)
输出是:
#food
#drink
#night
#three
#four
Run Code Online (Sandbox Code Playgroud)
魔术发生在"#\ w +"中.
#
模式以#开头\w
匹配任何字母(az,AZ),数字(0-9)或下划线.+
匹配一个或多个连续\w
字符.因此,我们搜索以#
一个或多个字母,数字或下划线开头的内容.
由于Escape Sequences,我们使用'\\'作为'\' .
你可以在这里玩.
find
并group
在这里解释:
find
方法扫描输入序列,寻找与模式匹配的下一个子序列.group()
返回上一个匹配所匹配的输入子序列.[编辑]
\w
如果您需要检测重音字符或非拉丁字符,则可能会出现问题.
例如:
"Bonjour mon#bébé#chat."
比赛将是:
这取决于你将接受什么样的hashTag.但这是另一个问题,关于它存在多种 讨论 .
例如,如果你想要任何语言的任何字符,#\p{L}+
看起来不错,但下划线不在其中......
归档时间: |
|
查看次数: |
9770 次 |
最近记录: |