所以我的问题是我必须计算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$-
用于什么吗?
答案 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");
}