android 查找字符串中被“[”和“]"包围的单词:

twh00eeo  于 12个月前  发布在  Android
关注(0)|答案(5)|浏览(88)

我需要一个简单的java任务。我有以下句子:
你在哪里[员工姓名]?你有一个[Shift] shift..
我需要提取被[]符号包围的字符串。
我想使用带有" "参数的split方法,然后查找单个单词,但如果我要查找的短语包含以下内容,则会出现问题:" " .使用indexOf也可能是一个选项,只是我不知道我已经到达String的末尾的指示是什么。
执行此任务的最佳方法是什么?如果你能帮忙的话,我将不胜感激。

vuktfyat

vuktfyat1#

尝试使用regex \[(.*?)\]匹配单词。
\[:转义了[,因为它是一个Meta字符。
(.*?):以非贪婪的方式匹配所有内容。
样本代码:

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());
}
uinbv5nw

uinbv5nw2#

下面是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");
    }
  }
}

如果要忽略白色,请删除"( )";

nx7onnlm

nx7onnlm3#

这是扫描仪基础解决方案

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
t8e9dugd

t8e9dugd4#

使用StringBuilder(我假设您不需要同步)。
正如您所建议的,使用方括号分隔符的indexOf()将为您提供一个起始索引和一个结束索引。使用substring(startIndex + 1,endIndex - 1)来获取你想要的字符串。
我不知道你说的字符串结尾是什么意思,但是indexOf("[")是开始,indexOf("]")是结尾。

pxq42qpu

pxq42qpu5#

这几乎就是正则表达式的用例。尝试"(\\[[\\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();
}

这个表达式有什么作用?

  • 首先,它定义了一个组(...)
  • 然后它定义该组的起点。[匹配[,因为[本身是正则表达式的'关键字',它必须由\屏蔽,这在Java String中是保留的,必须由另一个\屏蔽。
  • 然后它定义了组[\w ]* 的主体。这里regexpression []与\w(意思是\w,意思是任何字母,数字或undescore)和一个blank(意思是空白)沿着使用。* 表示前一组中的零个或多个。
  • 然后定义组的端点]
  • 并关闭组)

相关问题