我收到了以下字符串:
String line = "#food was testy. #drink lots of. #night was fab. #three #four";
我想从中#food
#drink
#night
#three
和#four
。
我试过这段代码:
String[] words = line.split("#");
for (String word: words) {
System.out.println(word);
}
但它提供了food was testy
,drink lots of
,nigth was fab
,three
和four
。
答案 0 :(得分:12)
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());
}
输出是:
#food
#drink
#night
#three
#four
魔术发生在“#\ w +”中。
#
模式以#\w
Matches any letter (a-z, A-Z), number (0-9), or underscore。+
匹配一个或多个连续的\w
字符。因此,我们搜索以#
开头,后跟一个或多个字母,数字或下划线的内容。
由于Escape Sequences,我们对'\'使用'\\'。
你可以玩它here。
解释了{p>find
和group
here:
find
方法扫描输入序列,寻找与模式匹配的下一个子序列。group()
返回上一场比赛匹配的输入子序列。<强> [编辑] 强>
如果您需要检测重音字符或非拉丁字符,则\w
的使用可能会成为一个问题。
例如:
“Bonjour mon#bébé#chat。”
比赛将是:
这取决于您将接受的内容 hashTag 。但这是另一个问题multiple discussions exist about it。
例如,如果您想要任何语言的任何字符,#\p{L}+
看起来不错,但下划线不在其中......
答案 1 :(得分:-1)
请按照以下程序进行操作==&gt;
String candidate = "#food was testy. #drink lots of. #night was fab. #three #four";
String regex = "#\\w+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(candidate);
String val = null;
System.out.println("INPUT: " + candidate);
System.out.println("REGEX: " + regex + "\r\n");
while (m.find()) {
val = m.group();
System.out.println("MATCH: " + val);
}
if (val == null) {
System.out.println("NO MATCHES: ");
}
这将给出如下输出,因为我解决了我的netbeans IDE中的问题并测试了程序
INPUT: #food was testy. #drink lots of. #night was fab. #three #four
REGEX: #\w+
MATCH: #food
MATCH: #drink
MATCH: #night
MATCH: #three
MATCH: #four
您需要以下导入
import java.util.regex.Matcher;
import java.util.regex.Pattern;