【问题标题】:Java: how to split string with leading numbers in java [duplicate]Java:如何在java中使用前导数字分割字符串[重复]
【发布时间】:2023-04-01 23:00:02
【问题描述】:

我有一个字符串,比如

12abcdef
1ab2cdef
abcdef

字符串可以以数字或不以数字开头,但 我需要把它分成两部分,第一个数字(如果有的话)和第二个字符串

我需要将字符串拆分为 [12,abcdef] [1,ab2cdef][abcdef]

如何在 java 中做到这一点? java中的spilit应该使用哪个正则表达式?

【问题讨论】:

  • 使用split 使用正则表达式作为数字 - 在regex101.com尝试一些东西
  • 学习正则表达式,这对这个问题和许多其他问题都非常有用vogella.com/tutorials/JavaRegularExpressions/article.html
  • str.split("(?<=^\\d*)(?!\\d)", 2)
  • @shmosel 当我检查您提供的正则表达式时,它在 *.在 regerx101.com 中测试时
  • 它在 Java 中工作。

标签: java regex split


【解决方案1】:

只需计算连续数字并使用String.substring。

static String[] test(String s) {
    int e = 0;
    while (e < s.length() 
        && '0' <= s.charAt(e)
        && s.charAt(e) <= '9')
        e++;
    return e == 0 || e == s.length() ? 
        new String[] { s } : 
        new String[] { s.substring(0, e), s.substring(e) };
}

【讨论】:

    【解决方案2】:

    使用带有捕获组的正则表达式和Matcher,如下所示:

    String s = "12abcdef";
    Pattern p = Pattern.compile("([0-9]*)([^0-9]*)");
    Matcher m = p.matcher(s);
    if (m.matches()){
        System.out.println("Digits = \"" + m.group(1) + "\"");
        System.out.println("Non-digits = \"" + m.group(2) + "\"");
    } else 
        System.out.println("No match");
    

    【讨论】:

      【解决方案3】:

      有很多方法可以解决这个问题,拆分是一个很好的开始。这是一个处理您的用户案例的工作示例。

      public class Main {
      
          public static void main(String[] args) throws IOException, InterruptedException {
              System.out.println(splitString("12abcdef"));
              System.out.println(splitString("1ab2cdef"));
              System.out.println(splitString("abcdef"));
          }
      
          private static String splitString(String string) {
              String[] split = string.split("[a-z]");
      
              return split.length >= 1 ? split[0] : "";
          }
      }
      

      这将返回数字,如果没有数字,则返回空白字符串。

      【讨论】:

        【解决方案4】:

        这就是您使用 java regex 所需要的:

        public class SplitNumStr {
            private final static Pattern NUM_STR_PATTERN = Pattern.compile("(\\d+)(\\w+)");
            public static void main(String... args) {
                List<String> list = new ArrayList<>(Arrays.asList("12absc", "2bbds", "abc"));
                for (String s : list) {
                    System.out.println(Arrays.toString(split(s)));
                }
            }
        
            private static String[] split(String numStr) {
                Matcher matcher = NUM_STR_PATTERN.matcher(numStr);
                if (matcher.find()) {
                    return new String[] {matcher.group(1), matcher.group(2)};
                } else return new String[] { numStr };
            }
        }
        

        还有输出:

        [12, absc]
        [2, bbds]
        [abc]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-02-14
          • 1970-01-01
          • 1970-01-01
          • 2013-01-27
          • 2014-09-25
          • 2015-01-01
          • 1970-01-01
          相关资源
          最近更新 更多