从字符串中提取以特定字符开头的单词

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,threefour.

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 +"中.

因此,我们搜索以#一个或多个字母,数字或下划线开头的内容.

由于Escape Sequences,我们使用'\\'作为'\' .

你可以在这里玩.

findgroup这里解释:

  • find方法扫描输入序列,寻找与模式匹配的下一个子序列.
  • group() 返回上一个匹配所匹配的输入子序列.

[编辑]

\w如果您需要检测重音字符或非拉丁字符,则可能会出现问题.

例如:

"Bonjour mon#bébé#chat."

比赛将是:

  • #B
  • #chat

这取决于你将接受什么样的hashTag.但这是另一个问题,关于它存在多种 讨论 .

例如,如果你想要任何语言的任何字符,#\p{L}+看起来不错,但下划线不在其中......