我在 java 中的一个简单任务需要帮助。我有以下句子:
你在哪里[员工姓名]?你有 [Shift] 班次..
我需要提取由[
和]
符号包围的字符串。
我正在考虑使用split
带有" "
参数的方法,然后找到单个单词,但是如果我要查找的短语包含:" "
. usingindexOf
也可能是一个选项,只是我不知道我已经到达String
.
执行此任务的最佳方法是什么?任何帮助,将不胜感激。
尝试使用正则表达式\[(.*?)\]
来匹配单词。
\[
[
:为文字匹配转义,因为它是一个元字符。
(.*?)
:以非贪婪的方式匹配所有内容。
示例代码:
Pattern p = Pattern.compile("\\[(.*?)\\]");
Matcher m = p.matcher("Where Are You [Employee Name]? your have a [Shift] shift.");
while(m.find()) {
System.out.println(m.group());
}
在这里,您可以使用 Java 正则表达式来提取两个括号之间的文本,包括空格:
import java.util.regex.*;
class Main
{
public static void main(String[] args)
{
String txt="[ Employee Name ]";
String re1=".*?";
String re2="( )";
String re3="((?:[a-z][a-z]+))"; // Word 1
String re4="( )";
String re5="((?:[a-z][a-z]+))"; // Word 2
String re6="( )";
Pattern p = Pattern.compile(re1+re2+re3+re4+re5+re6,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(txt);
if (m.find())
{
String ws1=m.group(1);
String word1=m.group(2);
String ws2=m.group(3);
String word2=m.group(4);
String ws3=m.group(5);
System.out.print("("+ws1.toString()+")"+"("+word1.toString()+")"+"("+ws2.toString()+")"+"("+word2.toString()+")"+"("+ws3.toString()+")"+"\n");
}
}
}
如果你想忽略空格删除"( )";
这是一个扫描仪基础解决方案
Scanner sc = new Scanner("Where Are You [Employee Name]? your have a [Shift] shift..");
for (String s; (s = sc.findWithinHorizon("(?<=\\[).*?(?=\\])", 0)) != null;) {
System.out.println(s);
}
输出
Employee Name
Shift
使用StringBuilder(我假设您不需要同步)。
正如您所建议的,indexOf()
使用方括号分隔符将为您提供起始索引和结束索引。使用 substring(startIndex + 1, endIndex - 1) 得到你想要的字符串。
我不确定字符串的结尾是什么意思,但indexOf("[")
它是开始indexOf("]")
也是结束。
这几乎就是正则表达式的用例。尝试"(\\[[\\w ]*\\])"
作为你的表达方式。
Pattern p = Pattern.compile("(\\[[\\w ]*\\])");
Matcher m = p.matcher("Where Are You [Employee Name]? your have a [Shift] shift..");
if (m.find()) {
String found = m.group();
}
这个表达式有什么作用?