优化在数字中添加零填充

时间:2019-04-30 07:24:21

标签: java

我正在练习如何优化代码,因此任何建议将不胜感激。我有这种方法,当数字增加零填充到一个数字。代码如下:

public class CommonAlgorithm {

    NumberRetrieve retrieve;

    public long incrementNumber(CommonNumber t) {
        CommonNumberFacade facade = new CommonNumberFacade(retrieve.apply(t));
        String number = facade.getGeneratedNumber();

        Long num = Long.parseLong(number);
        num++;

        String result = "";
        if (String.valueOf(num).length() < number.length()) {
            int length = number.length() - String.valueOf(num).length();
            String zero = "";
            for (int i = 0; i < length; i++) {
                zero += "0";
            }

            result = zero + num;
        } else {
            result = String.valueOf(num);
        }

        return Long.parseLong(t.getPrefix()+result);
    }
}

还有更多方法可以优化上面的代码吗?

只要有人要求该功能的目的,前提就是这样:

该函数返回一个数字,该数字由以下各项组成:“前缀”和“数字”。将数字增加1后,这两个按钮会彼此串联。但是,我意识到,如果number的值中填充了零,则这些零一旦转换为{{ 1}}数据类型。因此,如果应用以下值:

前缀= 123
号码= 000001

返回值为long,而不是1232。那就是以上功能正在解决的问题。我无法将123000002函数的返回类型更改为facade.generatedNumber(),因为最终需要在项目中的某个地方返回long的返回类型。希望您能提出一些建议

3 个答案:

答案 0 :(得分:3)

您可以按如下方式简化if-else语句:

StringBuilder sb = new StringBulder();
String numStr = String.valueOf(num);
for (int i = numStr.length(); i < number.length(); i++) {
    sb.append('0');
}
sb.append(numStr);
String result = sb.toString();

答案 1 :(得分:2)

一些简单的事情:

  • 您使用String对象构建您的结果,例如zeroresult。这些可能是StringBuilder对象。显然可以表达您构建字符串的意图!
  • 您可以考虑使用String.format()
  • 您要为相同的 num 调用String.valueOf(num); 3次。您最初可以执行一次,然后重用该值,而不必重复计算。

答案 2 :(得分:2)

使用数字基本类型long而不是对象包装器Long

    long num = Long.parseLong(number);
    num++;

num的字符串表示形式放入其自己的变量中。

    String numStr = String.valueOf(num);

仅需为的增量递增零填充即可保留原始位数,然后仅对进位/数字'0'填充。这意味着零应在符号后

String +, +=非常昂贵,请使用StringBuilder:

StringBuilder sb = new StringBuilder(number.length());

最优是相对的,可以这样做:

    long num = Long.parseLong(number);
    ++num;

    String paddedNumStr = numStr.length >= number.length() ? numStr
                    : String.format("%" + number.length() + "d", num);

使用if表达式作为启发式优化方法来处理95%的情况。