Java中String.format("%02d",10)输出??而非数字的问题求助
问题排查:String.format格式化后输出??
你的代码逻辑上应输出a10,但实际得到a??,核心原因大概率是字符编码不匹配或控制台显示环境异常,以下是具体排查步骤和解决方案:
单独验证格式化结果
先直接输出String.format的返回值,确认格式化本身是否正常:int num = 10; System.out.println(String.format("%02d", num));若输出为
10,说明格式化无问题,问题出在拼接后的输出环节;若输出为??,则是格式化时的Locale或编码异常。修改字符串拼接方式
将char类型的'a'改为String类型的"a",避免char与String相加时的隐式转换可能带来的编码隐患:int num = 10; String str = "a" + String.format("%02d", num); System.out.println(str);检查编码设置
打印当前系统和控制台的编码,确认是否支持ASCII字符输出:System.out.println("系统默认编码:" + System.getProperty("file.encoding")); if (System.console() != null) { System.out.println("控制台编码:" + System.console().charset()); }若编码不是UTF-8或GBK等支持ASCII的编码,可调整控制台编码(比如IDEA中在Run Configuration里添加VM参数
-Dfile.encoding=UTF-8)。验证字符串本身内容
将结果写入文件,排除控制台显示问题:import java.io.FileWriter; import java.io.IOException; public class Test { public static void main(String[] args) throws IOException { int num = 10; String str = "a" + String.format("%02d", num); FileWriter writer = new FileWriter("output.txt"); writer.write(str); writer.close(); } }若文件内容为
a10,说明是控制台显示问题,调整编码即可;若文件内容仍为a??,可添加VM参数-Duser.language=en -Duser.country=US强制使用英文Locale,排除Locale导致的格式化异常。
内容的提问来源于stack exchange,提问作者Ronit Mathur
相关产品推荐
相关产品推荐

