Java 在数字末尾加“0”
Java adding "0" at the end of the number
所以我的问题是我必须计算 10^n 使得 n ~ 10^5。显然它不适合任何数据类型,因此我决定改用字符串。
最后,我确实在初学者书中找到了解决方案
https://beginnersbook.com/2014/07/java-right-padding-a-string-with-spaces-and-zeros/.
我不要 BigInteger
乘以 10 n 次的解决方案。
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$-
和 s
的用途是什么?
也许我没有正确理解这个问题,但你不能:
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("[=12=]", "0");
}
%
代表String 的格式
1$
表示 String.format(String format, Object... args)
的第一个附加参数 args
,2$
将是第二个,依此类推。
-
是左对齐,结合数字声明最终输出的长度,简单说一下。 java.util.Formatter的文档解释的好一点:
Left justifies the output. Spaces ('\u0020') will be added at the end of the converted value as required to fill the minimum width of the field.
s
代表String参数类型
典型的例子是日志记录,您在其中使用 %s
解析参数,这实际上是相同的。使用美元字符和数字 %1$s
指定参数编号,-10
使最终输出长度为 10。
#mystring00@ // mystring00 has length 10
#mystring0000000@ // mystring0000000 has length 15
#mystring000000000000@ // #mystring000000000000 has length 20
大部分信息可以在 java.util.Formatter 的文档中找到,该文档在 String::format
.
中使用
您找到的代码片段可能有点令人困惑,因为即使没有 1$
它也能正常工作,因为参数是按顺序传递的。
尝试以下操作:String.format("%2$-" + num + "s", str, "test").replace(' ', '0');
。结果将是
#test000000@
#test00000000000@
#test0000000000000000@
而 String.format("%1$-" + num + "s", str, "test").replace(' ', '0');
会从您的代码段中得出原始结果。注意 1$
和 2$
的区别。
所以我的问题是我必须计算 10^n 使得 n ~ 10^5。显然它不适合任何数据类型,因此我决定改用字符串。 最后,我确实在初学者书中找到了解决方案 https://beginnersbook.com/2014/07/java-right-padding-a-string-with-spaces-and-zeros/.
我不要 BigInteger
乘以 10 n 次的解决方案。
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$-
和 s
的用途是什么?
也许我没有正确理解这个问题,但你不能:
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("[=12=]", "0");
}
%
代表String 的格式
1$
表示String.format(String format, Object... args)
的第一个附加参数args
,2$
将是第二个,依此类推。-
是左对齐,结合数字声明最终输出的长度,简单说一下。 java.util.Formatter的文档解释的好一点:Left justifies the output. Spaces ('\u0020') will be added at the end of the converted value as required to fill the minimum width of the field.
s
代表String参数类型
典型的例子是日志记录,您在其中使用 %s
解析参数,这实际上是相同的。使用美元字符和数字 %1$s
指定参数编号,-10
使最终输出长度为 10。
#mystring00@ // mystring00 has length 10
#mystring0000000@ // mystring0000000 has length 15
#mystring000000000000@ // #mystring000000000000 has length 20
大部分信息可以在 java.util.Formatter 的文档中找到,该文档在 String::format
.
您找到的代码片段可能有点令人困惑,因为即使没有 1$
它也能正常工作,因为参数是按顺序传递的。
尝试以下操作:String.format("%2$-" + num + "s", str, "test").replace(' ', '0');
。结果将是
#test000000@
#test00000000000@
#test0000000000000000@
而 String.format("%1$-" + num + "s", str, "test").replace(' ', '0');
会从您的代码段中得出原始结果。注意 1$
和 2$
的区别。