【问题标题】:How to split the string into string and integer in java?如何在java中将字符串拆分为字符串和整数?
【发布时间】:2013-05-23 03:10:13
【问题描述】:

我有String a="abcd1234",我想将其拆分为String b="abcd"Int c=1234。此拆分代码应适用于所有输入之王,例如 ab123456acff432 等。如何拆分这种字符串。有可能吗?

【问题讨论】:

    标签: java string split numbers number-formatting


    【解决方案1】:

    您可以尝试使用像(?<=\D)(?=\d) 这样的正则表达式进行拆分。试试这个:

    String str = "abcd1234";
    String[] part = str.split("(?<=\\D)(?=\\d)");
    System.out.println(part[0]);
    System.out.println(part[1]);
    

    会输出

    abcd
    1234
    

    您可以使用Integer.parseInt(part[1]) 将数字字符串解析为整数。

    【讨论】:

    • \D 匹配所有非数字字符,而\d 匹配所有数字字符。 ?&lt;= 是正向后视(因此当前位置之前的所有内容都被断言为非数字字符),?= 是正向前瞻(因此当前位置之后的所有内容都被断言为数字)。这有帮助吗?
    • @ConcurrentHashMap 如果像“ABC123DEF567”这样的字符串,此正则表达式将不起作用。
    • @MohitTyagi 没错,但这与 OP 提出的问题完全不同。如果您想找到正确的正则表达式,请尝试使用github.com/gskinner/regexr
    • 如果我们有 a,1,g,4,5,12,jh,49,mn,我们将如何分离?
    【解决方案2】:

    蛮力解决方案。

    String a = "abcd1234";
    int i;
    for(i = 0; i < a.length(); i++){
        char c = a.charAt(i);
        if( '0' <= c && c <= '9' )
            break;
    }
    String alphaPart = a.substring(0, i);
    String numberPart = a.substring(i);
    

    【讨论】:

      【解决方案3】:

      使用正则表达式:

      Pattern p = Pattern.compile("([a-z]+)([0-9]+)");
      Matcher m = p.matcher(string);
      if (!m.find())
      { 
        // handle bad string
      }
      String s = m.group(1);
      int i = Integer.parseInt(m.group(2));
      

      我还没有编译这个,但你应该明白了。

      【讨论】:

      • 感谢您的回答!
      【解决方案4】:

      你可以做下一个:

      1. 由像split("(?=\\d)(?&lt;!\\d)")这样的正则表达式分割
      2. 你有一个字符串数组,你只需要解析它。

      【讨论】:

      • "(?=\\d)(?
      【解决方案5】:
      public static void main(String... s) throws Exception {
              Pattern VALID_PATTERN = Pattern.compile("([A-Za-z])+|[0-9]*");
          List<String> chunks = new ArrayList<String>();
          Matcher matcher = VALID_PATTERN.matcher("ab1458");
          while (matcher.find()) {
              chunks.add( matcher.group() );
          }
      }
      

      【讨论】:

      • 您将字符类括号 [] 与括号 () 混淆了。
      • @Javier:模式说:任何大小写字母和/或数字
      • @Ravi:对不起,我没听懂你。
      • 你的量词 + 应该像 ([A-Z]|[a-z])+ 一样在 () 之后,并且字母也可以像 [a-zA-Z] 一样组合在一起。第一个问题是一个彻头彻尾的错误。第二个效果更好。
      • 实际上,你的正则表达式是行不通的。在 [0-9]+ 之前,您有一个 | 管道,在字母和数字之间进行 OR。您应该将此作为解决方案撤回或在正确测试后修复它。
      【解决方案6】:

      使用正则表达式"[^A-Z0-9]+|(? 按字母和数字分割字符串。

      例如

      String str = "ABC123DEF456";
      

      然后使用此正则表达式的输出将是:

      ABC
      123
      DEF
      456

      【讨论】:

      • 欢迎来到 Stack Overflow。这个问题已经有一个公认的答案。请提供更多解释,以说明您的答案可能比已经提供的更好或不同。
      【解决方案7】:
      String st = "abcd1234";
      String st1=st.replaceAll("[^A-Za-z]", "");
      String st2=st.replaceAll("[^0-9]", "");
      System.out.println("String b = "+st1);
      System.out.println("Int c = "+st2);
      

      输出

      String b = abcd
      Int c = 1234
      

      【讨论】:

        【解决方案8】:

        您可以在每组符号中添加一些分隔符,然后围绕这些分隔符拆分字符串:

        public static void main(String[] args) {
            String[][] arr = {
                    split("abcd1234", "\u2980"),
                    split("ab123456", "\u2980"),
                    split("acff432", "\u2980")};
        
            Arrays.stream(arr)
                    .map(Arrays::toString)
                    .forEach(System.out::println);
            // [abcd, 1234]
            // [ab, 123456]
            // [acff, 432]
        }
        
        private static String[] split(String str, String delimiter) {
            return str
                    // add delimiter characters
                    // to non-empty sequences
                    // of numeric characters
                    // and non-numeric characters
                    .replaceAll("(\\d+|\\D+)", "$1" + delimiter)
                    // split the string around
                    // delimiter characters
                    .split(delimiter, 0);
        }
        

        另见:How to split a string delimited on if substring can be casted as an int?

        【讨论】:

          【解决方案9】:

          试试这个:

          String input_string = "asdf1234";
          String string_output=input_string.replaceAll("[^A-Za-z]", "");
          int number_output=Integer.parseInt(input_string.replaceAll("[^0-9]", ""));
          System.out.println("string_output = "+string_output);
          System.out.println("number_output = "+number_output);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-12-07
            • 2020-05-18
            • 1970-01-01
            • 1970-01-01
            • 2011-05-31
            • 1970-01-01
            相关资源
            最近更新 更多