拆分带有很多分隔线的字符串

时间:2012-03-23 21:34:54

标签: java

我遇到了安装android的问题。

我有一个这样的字符串:

  

[[“Km”],[“Portagens”],[“Refeições - Almoço”],[“Refeições -   Jantar“],[”Refeições - Lanche“],[”Estacionamento“],[”Estadia“   酒店 “],[” Gasóleo “],[” Gasolina “],[” 出租车 “],[” Combóio “],[” Avião “],[” Viatura   de Aluguer“],[”Viaturas   BIQ“],[”Economato“],[”Correio“],[”Outros“],[”Refeições - Pequeno   almoço“]]

我想拆分它,将内容保存到数组中,如下所示:

Km
Portagens
Refeições-Almoço
Refeições-Jantar
Refeições-Lanche
Estacionamento

。 。 。

所以分隔符是:

1- [
2- ]
3 - "
4 - ,

我如何用这个字符分割字符串?

如果我使用[\\W],我会得到一些空字符串。

你能帮助我吗?

问候。

4 个答案:

答案 0 :(得分:2)

怎么样

[\[\]\",]{1,}

如果您提到的4个字符中有一个或多个字符,则会分割。

String[] words = str.split("[\\[\\]\\\",]{1,}");

答案 1 :(得分:0)

String[] tokens = s.split("\"\\],\\[\"");

您将对第一个和最后一个令牌进行特殊处理。

答案 2 :(得分:0)

  • 逃避[和],因为他们已经是正则表达式
  • 包括引号“”两侧未被\ w
  • 捕获
  • 用吗?最小匹配 - 最佳实践,这里不是绝对必要的。

代码

Pattern p = Pattern.compile("\\[\"(.*?)\"\\]");

String input = "[[\"Km\"],[\"Portagens\"],[\"Refeições - Almoço\"],[\"Refeições - Jantar\"],[\"Refeições - Lanche\"],[\"Estacionamento\"],[\"Estadia Hotel\"],[\"Gasóleo\"],[\"Gasolina\"],[\"Taxi\"],[\"Combóio\"],[\"Avião\"],[\"Viatura de Aluguer\"],[\"Viaturas BIQ\"],[\"Economato\"],[\"Correio\"],[\"Outros\"],[\"Refeições - Pequeno almoço\"]]";

Matcher m = p.matcher(input);
while (m.find()) {
    System.out.println(m.group(1));
}

输出

Km
Portagens
Estacionamento
Gasolina
Taxi
Economato
etc.

答案 3 :(得分:0)

我建议使用StringTokenizer

StringTokenizer st =
                new StringTokenizer("[[\"Km\"],[\"Portagens\"],[\"Refeiçoes - Almoço\"],[\"Refeiçoes - Jantar\"],[\"Refeiçoes - Lanche\"],[\"Estacionamento\"],[\"Estadia Hotel\"],[\"Gasóleo\"],[\"Gasolina\"],[\"Taxi\"],[\"Combóio\"],[\"Aviao\"],[\"Viatura de Aluguer\"],[\"Viaturas BIQ\"],[\"Economato\"],[\"Correio\"],[\"Outros\"],[\"Refeiçoes - Pequeno almoço\"]]", "\",[]");


        while (st.hasMoreElements()) {
            String token = st.nextElement().toString();
            System.out.println("Token = " + token);
        }

注意:这尚未经过测试。