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

时间:2013-05-05 11:11:52

标签: java android string split

我在java中需要一个简单的任务帮助。我有以下句子:

  

您[员工姓名]在哪里?   你有[Shift]班..

我需要提取[]符号所包围的字符串。

我正在考虑将split方法与" "参数一起使用,然后查找单个单词,但如果我正在查找的短语包含:{{1},我会遇到问题}。使用" "也可能是一个选项,只是我不知道我到达indexOf末尾的迹象是什么。

执行此任务的最佳方法是什么? 任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:13)

尝试使用正则表达式\[(.*?)\]来匹配单词。

\[:为了文字匹配而转义[,因为它是一个元字符。

(.*?):以非贪婪的方式匹配所有内容。

示例代码:

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

答案 1 :(得分:3)

在这里,您将使用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");
    }
  }
}

如果您想忽略空格,请删除"( )";

答案 2 :(得分:2)

这是一个扫描仪基础解决方案

    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

答案 3 :(得分:1)

使用StringBuilder(我假设您不需要同步)。

如您所知,indexOf()使用方括号分隔符将为您提供起始索引和结束索引。使用substring(startIndex + 1,endIndex - 1)来获得你想要的字符串。

我不确定你在字符串结尾处的含义是什么,但indexOf("[")是开始,indexOf("]")是结束。

答案 4 :(得分:1)

这几乎是正则表达式的用例。 请尝试"(\\[[\\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字符串中保留,并且必须被另一个\
  • 屏蔽)
  • 然后它定义了组的主体[\ w] * ...这里regexpression []和\ w(意思是\ w,意思是任何字母,数字或非意义)和空白一起使用,意思是空白。 *表示前一组中的零个或多个。
  • 然后它定义组\]
  • 的端点
  • 并关闭小组)