如何在Java中使用下划线填充数字,而不是通常的零?
例如我想要
我尝试了很多东西,最接近的是我(通过使用SYMBOLS.setZeroDigit('_');):
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
public class Example {
public static void main(String[] args) {
DecimalFormatSymbols SYMBOLS = new DecimalFormatSymbols();
SYMBOLS.setDecimalSeparator('.');
SYMBOLS.setGroupingSeparator(',');
DecimalFormat OUTPUT_FORMAT = new DecimalFormat("000,000.00", SYMBOLS);
System.out.println(OUTPUT_FORMAT.format(0.01));
// got 000,000.01
System.out.println(OUTPUT_FORMAT.format(0.12));
// got 000,000.12
System.out.println(OUTPUT_FORMAT.format(123456));
// got 123,456.00
System.out.println(OUTPUT_FORMAT.format(123456.78));
// got 123,456.78
System.out.println(OUTPUT_FORMAT.format(1234));
// got 001,234.00
System.out.println(OUTPUT_FORMAT.format(1234.56));
// got 001,234.56
SYMBOLS.setZeroDigit('_');
OUTPUT_FORMAT = new DecimalFormat("000,000.00", SYMBOLS);
System.out.println(OUTPUT_FORMAT.format(0.01));
// expected ______._1 but got ___,___._`
System.out.println(OUTPUT_FORMAT.format(0.12));
// expected ______.12 but got ___,___.`a
System.out.println(OUTPUT_FORMAT.format(123456));
// expected 123,456.__ but got `ab,cde.__
System.out.println(OUTPUT_FORMAT.format(123456.78));
// expected 123,456.78 but got `ab,cde.fg
System.out.println(OUTPUT_FORMAT.format(1234));
// expected __1,234.00 or at least __1,234.__ but got __`,abc.__
System.out.println(OUTPUT_FORMAT.format(1234.56));
// expected __1,234.56 but got __`,abc.de
}
}
嗯,如果形成正确(带尾随下划线),不是非常接近,而是一个空数字: 的 _ __ ,的 _ __ 即可。 的 __
无论如何,关于如何获得预期行为的建议?
答案 0 :(得分:6)
"_________".substring( num.length() )+num;
其中num
是String
,其中包含您的号码。要将double
转换为String
,您可以使用Double.toString(myDouble)
。
答案 1 :(得分:3)
您可以使用Apache Commons库中的StringUtils.leftPad()
方法。
// pad to 10 chars
String padded = StringUtils.leftPad("123.456", 10, '_');
// padded will be equal to "___123.456"
答案 2 :(得分:2)
import java.text.DecimalFormat;
class F {
public static void main( String ... args ) {
DecimalFormat f = new DecimalFormat("000,000.00");
for( double d : new double[]{ 0.01, 0.12, 123456, 123456.78, 1234, 1234.56 }){
System.out.println(
f.format(d).replaceAll("0","_").replaceAll("_,_","__")
);
}
}
}
输出:
______._1
______.12
123,456.__
123,456.78
__1,234.__
__1,234.56
可能只需要一步完成替换,但我会告诉你。