【问题标题】:Splitting a string in java twice在java中拆分字符串两次
【发布时间】:2014-02-04 01:58:27
【问题描述】:

我想拆分字符串:“Attack Potion[1]”,这样在这种情况下我只剩下数字“1”。

我试过了,但是没用:

public static void main(String[] args) {
    System.out.println("" + splitter("Attack Potion[1]"));

}

public static int splitter(String i) {
    String[] splitOne = i.split("[");
    String[] splitTwo = splitOne[1].split("]");
    int extractedNumber = Integer.parseInt(splitTwo[0]);
    return extractedNumber;
}

我希望输出是:

1

【问题讨论】:

    标签: java arrays split


    【解决方案1】:

    您需要转义 [] 字符,因为 they're special characters in regular expressions. 您需要两个斜杠,因为单个反斜杠用于表示某种转义序列(即:\n 表示换行符等) .

    尝试以下方法:

    String[] splitOne = i.split("\\[");
    String[] splitTwo = splitOne[1].split("\\]");
    

    或者,您可以使用Pattern.quote

    例子:

    String[] splitOne = i.split(Pattern.quote("["));
    

    【讨论】:

      【解决方案2】:

      您应该将对String#split("[") 的调用替换为对split("\\[") 的调用。

      我为什么要split("\\[")

      String#splitregex 一起使用,但 [ 不是 regex 中的标准字符。 为此,需要转义,使用\[。但是,在 Java String 中,\ 也不是标准字符,也需要转义。 因此,为了拆分[,使用的Java字符串是"\\["

      【讨论】:

        【解决方案3】:

        split 使用正则表达式作为参数,并且在正则表达式中[] 是创建像[a-z] 这样的字符类的特殊字符。要使它们成为简单的文字,您需要对它们进行转义。你可以用"\\["\\]来做到这一点(实际上你不必逃避],如果它之前没有未闭合的元字符[。所以你可以试试

        String[] splitOne = i.split("\\[");
        String[] splitTwo = splitOne[1].split("]");
        

        或者甚至使用|(表示或)并将] 添加到您的第一个拆分中

        String[] splitOne = i.split("\\[|]");
        int extractedNumber = Integer.parseInt(splitOne[1]);
        //                                     ^-use result from splitOne
        

        【讨论】:

          【解决方案4】:

          我会使用这个正则表达式:

          String string = "Attack Potion[100]";
          System.out.println(string.replaceAll("[^0-9]", ""));
          

          输出:

          100
          

          【讨论】:

            【解决方案5】:

            定界对我有用。

            String[] splitOne = i.split("\\[");
            

            【讨论】:

              【解决方案6】:

              你需要像这样逃跑 ("\]"),("\[");

              public static void main(String[] args) {
                      System.out.println("" + splitter("Attack Potion[1]"));
              
                  }
              
                  public static int splitter(String i) {
                      String[] splitOne = i.split("\\[");
                      String[] splitTwo = splitOne[1].split("\\]");
                      int extractedNumber = Integer.parseInt(splitTwo[0]);
                      return extractedNumber;
                  }
              

              输出

              1
              

              【讨论】:

                【解决方案7】:

                对于正则表达式,您必须转义 [] 字符,因为它们是正则表达式分隔符的一部分。所以你需要这样做:

                String[] splitOne = i.split("\\[");
                String[] splitTwo = splitOne[1].split("\\]");
                

                但是,您甚至不需要再次拆分它。如果您确定[ 后面的数字只有一位,您可以这样做:

                public static int splitter(String i) {
                    String[] splitOne = i.split("\\[");
                    int extractedNumber = Integer.parseInt(splitOne[1].substring(0,1));
                    return extractedNumber;
                }
                

                使用子串只解析第一个数字。

                【讨论】:

                  【解决方案8】:

                  检查下面的sn-p。它应该可以工作。

                  String pattern = "(.*\\[)(\\d+)(\\])";
                  Pattern regc = Pattern.compile(pattern);
                  String tomatch = "Attack Potion[1]";
                  Matcher matcher = regc.matcher(tomatch);
                  if (matcher.find() && matcher.groupCount() == 3){
                      System.out.println(matcher.group(2));
                  }
                  

                  基本上,最好使用正则表达式来做这些事情。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2022-01-25
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-04-14
                    • 2012-12-24
                    相关资源
                    最近更新 更多