如何从括号中的字符串中提取所需的字符串

时间:2014-03-10 18:05:54

标签: java

抱歉标题不好。随意提出更好的头衔。

我有一个像

这样的字符串
[Munich, Germany],[Jingle Pot Rd, Nanaimo, BC, Canada],...

现在我想将此列表转换为LinkedList位置 其中

 so 0 index -> Munich, Germany
      1 index -> Jingle Pot Rd, Nanaimo, BC, Canada

依旧......

我如何在java中非常有效地完成这项工作。我想过使用string.split(),但这将是做这样的事情的有效方法。

2 个答案:

答案 0 :(得分:2)

尝试与“括号内的任何内容”(例如\[(.*?)\])上的捕获组匹配,并将该组添加到列表中:

public static List<String> getStringsInBrackets(String s) {
  Pattern p = Pattern.compile("\\[(.*?)\\]");
  Matcher m = p.matcher(s);
  List<String> list = new ArrayList<String>();
  while (m.find()) { list.add(m.group(1)); }
  return list;
}

例如:

public static void main(String args[]) {
  String s = "[Munich, Germany],[Jingle Pot Rd, Nanaimo, BC, Canada]";
  List<String> ss = getStringsInBrackets(s);
  ss.get(0); // => "Munich, Germany"
  ss.get(1); // => "Jingle Pot Rd, Nanaimo, BC, Canada"
}

如果性能成为问题,您可以预先编译模式。

答案 1 :(得分:1)

使用正则表达式怎么样? http://ideone.com/lZK0wo

import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Pattern p = Pattern.compile("\\[(.*?)\\]");
        Matcher m = p.matcher("[Munich, Germany],[Jingle Pot Rd, Nanaimo, BC, Canada]");

        while(m.find()) {
            System.out.println(m.group(1));
        }
    }
}

打印:

Line 1:  Munich, Germany
Line 2:  Jingle Pot Rd, Nanaimo, BC, Canada