0

我有一个用户输入的字符串25|35|40。我已将以下任何数字100=25+35+40格式化为这种格式。例如,

5  --> 05|00|00
30 --> 25|05|00
65 --> 25|35|05

应保持 25|35|40 的顺序。这类似于日期格式 MM:dd:yyyy,因为我们知道月份不能超过 12 并且日期不能超过 31。但是这里可以出现任何值。其位置的值确定最大值。另一个例子,

如果用户字符串是40|110|2500|350

5    --> 05|000|0000|000
100  --> 40|060|0000|000
450  --> 40|110|0300|000
2900 --> 40|110|2500|250

如果数量超过总数3000=40+110+2500+350,我可以将其设为number -= 3000。目前我正在尝试使用自定义代码对其进行格式化,该代码将检查数字并创建所需的输出字符串。java中有没有可用的内置格式API?

4

1 回答 1

0

没有针对此类特定用例的公共 API。这是解决它的一种方法:

int num = 65;
int i1 = num > 25 ? 25 : num;
int i2 = num < 25 ? 0 : num > 60 ? 35 : num - 25;
int i3 = num < 60 ? 0 : num - 60;
System.out.format("%02d|%02d|%02d", i1, i2, i3);

印刷

25|35|05

或者,概括一下:

public static String format(String format, int num) {
    String[] split = format.split("\\|");
    int numLeft = num;
    StringBuilder result = new StringBuilder();
    for (int i = 0; i < split.length; i++) {
        int boundary = Integer.parseInt(split[i]);
        int number = Math.min(numLeft, boundary);
        if (result.length() > 0) {
            result.append('|');
        }
        result.append(leftPad(number, split[i].length()));
        numLeft = Math.max(0, numLeft - boundary);
    }
    return result.toString();
}

private static String leftPad(int number, int length) {
    StringBuilder sb = new StringBuilder();
    sb.append(number);
    while (sb.length() < length) {
        sb.insert(0, '0');
    }
    return sb.toString();
}

public static void main(String[] args) {
    String result = format("25|35|40", 65);
    System.out.println(result);
}
于 2012-07-25T08:29:56.757 回答