Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我会得到一个非法的FormatConversionException?_Java_Format - Fatal编程技术网

Java 为什么我会得到一个非法的FormatConversionException?

Java 为什么我会得到一个非法的FormatConversionException?,java,format,Java,Format,我正在生成一些随机密钥,我需要大小为k(位)。我想要二进制格式的。正如预期的那样,最左边位为0的键的大小小于k。我想格式化这些字符串,使它们有丢失的零,并再次具有k位的大小 问题是返回String.format(“%0128d”,bg.toString(2))导致java.util.IllegalFormatConversionException:d!=java.lang.String。我做错了什么 // Method to generate random keys of k bits each

我正在生成一些随机密钥,我需要大小为k(位)。我想要二进制格式的。正如预期的那样,最左边位为0的键的大小小于k。我想格式化这些字符串,使它们有丢失的零,并再次具有k位的大小

问题是
返回String.format(“%0128d”,bg.toString(2))导致
java.util.IllegalFormatConversionException:d!=java.lang.String
。我做错了什么

// Method to generate random keys of k bits each
public String keyGenerator(int k) {

    SecureRandom srandom = new SecureRandom();
    // Constructor: BigInteger(int numBits, Random rnd)
    // Create a random big integer of k bits using secure random
    BigInteger bg = new BigInteger(k, srandom);

    // If the very left values are zeros they disappear. We need to pad the String to have k bits
    if (bg.toString(2).length() < k) {
        return String.format("%0128d", bg.toString(2));
    }

    // Return the bg with radix 2 (= show it in binary)
    return bg.toString(2);

}
//生成每个k位随机密钥的方法
公共字符串键生成器(int k){
SecureRandom srandom=新的SecureRandom();
//构造函数:BigInteger(int numBits,随机rnd)
//使用secure random创建k位的随机大整数
BigInteger bg=新的BigInteger(k,srandom);
//如果最左边的值是零,它们就会消失。我们需要填充字符串以获得k位
if(bg.toString(2.length()
%d用于显示整数。如果要将字符串显示为
bg.toString()
您必须使用
%s
并正确设置格式


有关所有格式化程序选项,请参阅。

%d
用于格式化整数。你在给它一个字符串。我觉得很愚蠢,尽管
返回string.format(“%0128s”,bg.toString(2))也不起作用。我得到一个
java.util.FormatFlagsConversionMismatchException:Conversion=s,Flags=0
异常。请检查以BigDecimal开头的段落。%0不允许用于字符转换:即:不能用0填充字符串。。。。