【问题标题】:split() function for '$' not working [duplicate]'$'的split()函数不起作用[重复]
【发布时间】:2014-04-08 15:46:45
【问题描述】:

我在做一个简单的代码

String splitString = "122$23$56$rt";
for(int i=0;i<splitString.split("$").length;i++){
   System.out.println("I GOT IS :: "+splitString.split("$")[i]);
}

当我分裂时

splitString.split("$")

它给了我输出[122$23$56$rt]

为什么这不是“$”上的夹板?

【问题讨论】:

    标签: java


    【解决方案1】:

    逃脱它。 split() 方法采用正则表达式:split("\\$")

    【讨论】:

      【解决方案2】:

      String.split() 接受 regex 作为参数,$Java regex API 中的元字符。因此,您需要对其进行转义:

      String splitString = "122$23$56$rt";
      for(int i=0;i<splitString.split("\\$").length;i++){
         System.out.println("I GOT IS :: "+splitString.split("\\$")[i]);
      }
      

      Java regex API 支持的其他元字符有:&lt;([{\^-=!|]})?*+.&gt;

      【讨论】:

        【解决方案3】:
        split(Pattern.quote("$"))
        

        是我的最爱。

        Pattern#quote:

        返回指定字符串的文字模式字符串。

        您的代码不起作用,因为 $ 在正则表达式中具有特殊含义,并且由于 String#splitregex 作为参数,因此 $ 不会被解释为字符串 @ 987654329@,但作为特殊的meta character$

        【讨论】:

        • 不知道那个!谢谢
        【解决方案4】:

        试试这样的

        String splitString = "122$23$56$rt";
        for(int i=0;i<splitString.split("\\$").length;i++){
           System.out.println("I GOT IS :: "+splitString.split("$")[i]);
        }
        

        注意:split() 使用正则表达式。

        您的正则表达式使用了一个特殊字符,即$

        $ 是“行尾”的正则表达式。

        【讨论】:

          【解决方案5】:

          像这样逃跑

          split("\\$")
          

          而不是拆分(“$”)

          【讨论】:

            【解决方案6】:
            String splitString = "122$23$56$rt";
            for(int i=0;i<splitString.length;i++){
               System.out.println("Now you GOT this :: "+split(Pattern.quote("$")));
            }
            

            有 12 个具有特殊含义的字符:反斜杠 \、插入符号 ^、美元符号 $、句点或点 .、竖线或管道符号 |、问号 ?、星号或星号 *、加号 +、左括号 (, 右括号)、左方括号 [、左大括号 {,这些特殊字符通常称为“元字符”。

            所以你的$ 也是metacharacter,正如定义所说,所以你不能使用简单的函数进行拆分。虽然在这种情况下你必须使用pattern

            谢谢..

            【讨论】:

            • +1,但请在答案中提供解释。
            • @MarounMaroun:检查我的编辑。还是谢谢!!
            • 现在解释一下! :)
            【解决方案7】:

            String.split().match().replaceAll() 是一些使用 RegEx 模式的方法,因此您应该查看 Pattern class 的 javadoc:

            如果您的拆分字符恰好是模式字符之一,您必须使用\\ 对其进行转义,在这种情况下您的拆分调用应该是:.split("\\$")

            【讨论】:

              【解决方案8】:

              它不起作用,因为 split() 将输入作为正则表达式

              String splitString = "122$23$56$rt";
              for(int i=0;i<splitString.split("\\$").length;i++){
              System.out.println("I GOT IS :: "+splitString.split("\\$")[i]);
              }
              

              【讨论】:

                猜你喜欢
                • 2013-03-22
                • 1970-01-01
                • 2015-01-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-27
                • 1970-01-01
                相关资源
                最近更新 更多