【问题标题】:String split() over white spaces and "(" and ")"字符串 split() 覆盖空格和 "(" 和 ")"
【发布时间】:2012-10-08 08:28:57
【问题描述】:

我有一个String

String testString = "IN NEWYORK AND (OUT FLORIDA)" ; 

我想把这个字符串拆分成数组 Like :

String testArray[] = testString.split("\\s()");

我希望结果是:

testArray[0] = "IN";
testArray[1] = "NEWYORK";
testArray[2] = "AND";
testArray[3] = "(";
testArray[4] = "OUT";
testArray[5] = "FLORIDA";
testArray[6] = ")";

但是,我得到的输出是:

testArray[0] = "IN";
testArray[1] = "NEWYORK";
testArray[2] = "AND";
testArray[3] = "(OUT";
testArray[4] = "FLORIDA)";

它在空格上拆分,但不是在 "(" 和 ")" 上,我希望 "(" 和 ")" 作为单独的字符串。

【问题讨论】:

  • "我希望 () 成为单独的字符串":() 在您的数组中是单独的字符串。但也许我不明白你的问题。
  • nopes Baz 实际输出是 testArray[0] = "IN"; testArray[1] = "纽约"; testArray[2] = "与"; testArray[4] = "(OUT"; testArray[5] = "FLORIDA)";
  • 不应该是\\s 而不是//s
  • 是的 Jesper 我已经更正了。
  • 此链接是否有帮助:stackoverflow.com/questions/2206378/… ?

标签: java string split


【解决方案1】:

试试下面的:

String testArray[] = testString.split("\\s|(?<=\\()|(?=\\))");

【讨论】:

    【解决方案2】:

    split() 需要删除分隔符。使用 StringTokenizer 并指示它保留分隔符。

        StringTokenizer st = new StringTokenizer("IN NEWYORK AND (OUT FLORIDA)", " ()", true);
        while (st.hasMoreTokens()) {
            String t = st.nextToken();
            if (!t.trim().equals("")) {
                System.out.println(t);
            }
        }
    

    【讨论】:

      【解决方案3】:

      如果你想用字符串拆分来做,那么像\s+|((?&lt;=\()|(?=\())|((?&lt;=\))|(?=\))) 这样的怪异正则表达式几乎是不可避免的。这个正则表达式基于this 问题,顺便说一句,它几乎可以工作。

      最简单的方法是按照@acerisara 的建议用空格包围括号,或者按照@user1030723 的建议使用StringTokenizer

      【讨论】:

      • 我认为你有一个额外的“)”那里。正确的应该是:\s+|((?gskinner.com/RegExr。但是,对于某些原因它不匹配任何东西......
      • @androiddeveloper:您没有转义任何括号并产生了格式错误的正则表达式,这就是它不起作用的原因。
      • 什么意思?我用的正是你写的。我也不明白你是否同意你有额外的“)”。
      • @androiddeveloper:我的意思是,在像(?&lt;=() 这样的子句中,第二个'(' 应该转义为(?&lt;=\\()。所以,不,我的正则表达式中没有额外的括号:)
      • 好的,那么应该在测试网站上写什么才能看到它的工作原理?
      【解决方案4】:
      String test = "IN NEWYORK AND (OUT FLORIDA)";
      // this can for sure be done better, hope you get the idea
      String a = test.replaceAll("(", "( ");
      String b = a.replaceAll(")", " )";
      
      String array[] = b.split("\\s");
      

      【讨论】:

        猜你喜欢
        • 2022-11-17
        • 1970-01-01
        • 2014-06-07
        • 2014-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        相关资源
        最近更新 更多