【问题标题】:Splitting up a String by given digits in Java在Java中按给定数字拆分字符串
【发布时间】:2025-12-23 16:00:12
【问题描述】:

我有一个如下所示的字符串:450ZVXX_OF_INV_CC 3,它基本上由三部分组成:第 1 列3 位(在本例中为数字 450), 第 2 列30 位(在这种情况下,数字和空格直到 3)并且 第 3 列 再次有 3 位

现在我需要使用数字 3、30、3(存储在整数中)将字符串拆分为三个部分,因为我必须构建一个包含上述三列的表。

所以我基本上想取int1 = 3,得到String的前3位。然后我取 int2 = 30,得到 String 的下 30 位数字。然后我取 int3 = 3 来获取字符串的下 3 位。

仅供参考:长度数字3、30、3是数据库系统预设的列长度。

Regex 没有用,因为我没有任何用于拆分字符串的数字或字符。我将只使用上面解释的预设数字。

编程语言:Java

提前致谢!

【问题讨论】:

  • String.substring(0, 3). String.substring(3, 30 + 3). String.substring(30 + 3).
  • Regex 在这里并不是真正的必要工具。 *.com/questions/3481828/…
  • @FranMontero 在substring() 方法中必须使用逗号(,) 而不是点(.)。
  • 当然,尽可能快地输入它:D @Rustam
  • 我只想指出正则表达式可以做到这一点:(.{3})(.{30})(.{3})。不过,@FranMontero 的评论更好。

标签: java regex string split


【解决方案1】:

您可以使用String.substring 方法对其进行编码。

public class SubStrings {
  public static void main(String[] args) {
    String input = "450ZVXX_OF_INV_CC                 3";
    int first = 3;
    int second = 30;
    String part1 = input.substring(0, first);
    String part2 = input.substring(first, first+second);
    String part3 = input.substring(first+second);
    System.out.println(part1);
    System.out.println(part2);
    System.out.println(part3);
  }
}

【讨论】:

    【解决方案2】:

    这对你有用。

    public class SubStrings {
      public static void main(String[] args) {
        String abc="123456789101112131415151617181999123";
        Integer first = Integer.parseInt(abc.substring(0, 3));
        BigInteger second = new BigInteger(abc.substring(3, 30));
        Integer third = Integer.parseInt(abc.substring(33, 36));
        System.out.println(first);
        System.out.println(second);
        System.out.println(third);
      }
    }
    

    【讨论】:

    • 如果字符串的长度小于 36,第三个 substring 可以抛出 StringIndexOutOfBoundsException。对于问题中提供的示例字符串,甚至会发生同样的情况。
    • @abhishekbafna 他提供的字符串似乎只是一个例子,因为他提到“Column 1 has 3 digits”, “Column 230 位","第 3 列3 位" 突出显示。
    • @Jan Konrad 请澄清问题。位数是否可以少于 36?
    • 为什么要为所有三个部分创建BigInteger 对象。 firstthird 仅包含 3 个字符,因此最大值为 999second 的输入部分不需要 number。甚至样本数据也包含字符和空格(ZVXX_OF_INV_CC )
    • @abhishekbafna 当然,你明白 BigInteger 的意思。但仍然不太确定字符串的可能内容是什么。让提问者回答他想要什么