Java在数字末尾添加“ 0”

时间:2018-07-14 11:35:49

标签: java string formatting zero-padding

所以我的问题是我必须计算10 ^ n使得n〜10 ^ 5。显然,它不适合任何数据类型,因此我决定改用字符串。 最后,我确实在初学者的书中找到了解决方案 https://beginnersbook.com/2014/07/java-right-padding-a-string-with-spaces-and-zeros/

我不希望用if(mysqli_query($mysqli, $sql)){ echo "Updated"; } else { echo "ERROR: $sql. " . mysqli_error($mysqli); } 解决方案乘以10 n次。

BigInteger

输出:

public class PadRightExample2 {
    public static void main(String[] argv) {
        System.out.println("#" + rightPadZeros("mystring", 10) + "@");
        System.out.println("#" + rightPadZeros("mystring", 15) + "@");
        System.out.println("#" + rightPadZeros("mystring", 20) + "@");
    }

    public static String rightPadZeros(String str, int num) {
        return String.format("%1$-" + num + "s", str).replace(' ', '0');
    }
}

任何人都可以解释#mystring00@ #mystring0000000@ #mystring000000000000@ 是什么和%1$-用于什么吗?

2 个答案:

答案 0 :(得分:1)

  • %代表字符串的格式
  • 1$表示args的第一个附加参数String.format(String format, Object... args)2$将是第二个,依此类推。
  • 简而言之,
  • -是左对齐,与数字相关联声明最终输出的长度。 java.util.Formatter的文档说明要好一些:

      

    左对齐输出。将根据需要在转换后的值的末尾添加空格(\ u0020),以填充字段的最小宽度。

  • s代表String参数类型

典型示例是日志记录,您可以在其中使用%s解析参数,这实际上是相同的。使用美元字符和数字%1$s,您可以指定参数数字,而-10的最终输出长度为10。

#mystring00@            // mystring00 has length 10
#mystring0000000@       // mystring0000000 has length 15
#mystring000000000000@  // #mystring000000000000 has length 20

大多数信息可以在String::format中使用的java.util.Formatter文档中找到。


您发现的代码段可能有点令人困惑,因为即使没有1$,它也可以工作,因为参数是按顺序传递的。

请尝试以下操作:String.format("%2$-" + num + "s", str, "test").replace(' ', '0');。结果将是

#test000000@
#test00000000000@
#test0000000000000000@

String.format("%1$-" + num + "s", str, "test").replace(' ', '0');会导致您的摘要产生原始结果。请注意1$2$的区别。

答案 1 :(得分:-1)

也许我不能正确理解问题,但是您不能做到:

public static String rightPadZeros(String str, int num) {
    String add = "";
    for(int i = 0; i < num;i++) add += "0";
    return str + add;
}

我不太了解为什么num=10时为什么要两个零,但是如果需要,请这样做:

public static String rightPadZeros(String str, int num) {
    String add = "";
    for(int i = 0; i < num - 8;i++) add += "0";
    return str + add;
}

编辑:这显然对性能不利,因此可能会更好:

public static String rightPadZeros(String str, int num) {
    return str + new String(new char[num]).replace("\0", "0");
}