我得到以下字符串:
String line = "#food was testy. #drink lots of. #night was fab. #three #four";
我想从里面拿走食物和饮料。
我尝试了以下代码:
String[] words = line.split("#");
for (String word: words) {
System.out.println(word);
}
但它给人的感觉是,食物很刺激,喝了很多,离食物很近,三个和四个。
请按照程序执行==
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;
拆分
只会在找到#的位置剪切整个字符串。这就解释了你目前的结果。
您可能希望提取每段字符串的第一个单词,但执行任务的好工具是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
匹配任何字母(a-z、A-Z)、数字(0-9)或下划线。
匹配一个或多个连续的\w
字符。因此,我们搜索的内容以一个或多个字母、数字或下划线开头。
由于转义序列,我们将'\\'用于'\'。
你可以在这里玩。
此处解释了查找和分组:
find
方法扫描输入序列,寻找与模式匹配的下一个子序列[编辑]
如果需要检测重音字符或非拉丁字符,则可能会出现问题。
例如在:
"你好,我的#bébé#聊天。"
匹配项将是:
这取决于您将接受什么样的标签。但这是另一个问题,对此存在着多种讨论。
例如,如果您想要来自任何语言的任何字符,#\p{L}
看起来不错,但下划线不在其中...
问题内容: 我想在elasticsearch中编写一个查询,这样它只会给出字符串从特定单词开始的结果,例如,如果我要搜索“ Donald”,则我现在有一个字符串“ Donald Duck”,而另一个字符串是“ Alan Donald” “与以下查询 那么结果应该是“ Donald Duck”而不是“ Alan Donald”,因为在“ Donald Duck”中,它以“ Donald”开头。现在有
我有一个字符串: 我想从中提取,即从右边的最后一个或第一个之后的子字符串。 有人能提供一些帮助吗?
我有一个以下格式的Java字符串==ocid1。instancepool。oc1.iad。aaaaaaaa wq4bibigdvw6esvmbia4zhs7dkaposzkzxuvir2ajtfyciih45fa 我想提取第三个和第四个点之间的子串,即“iad”。实现这一点的最佳方式是什么?逻辑应该是通用的,并且应该适用于任何有四个点的字符串。
问题内容: 我有一个看起来像这样的数组: 我如何仅获取以其开头的元素? 问题答案:
所谓字符串,指的就是字符的序列或者“串”。我们要在字符串上执行的第一个操作是提取所有字符中的一个。C++使用方括号([和])执行该操作: apstring fruit = "banana"; char letter = fruit[1]; cout << letter << endl; 表达式fruit[1]表明我们要从字符串变量fruit中取得编号为1的字符,并将结果保存在字符变量letter
问题内容: 我有一个看起来像这样的字符串: 我如何删除第一个; 但只有在字符串的开头找到它? 使用,将删除 所有 。 问题答案: 普通格式,不带正则表达式: 花费: 0.0369毫秒 (0.000,036,954秒) 与: 注意到: 0.1749毫秒 (0.000,174,999秒)第一次运行(编译),和 0.0510毫秒 (0.000,051,021秒)之后。 显然,已在我的服务器上进行了分析。