为什么我不能将变量作为格式字符串传递给java中的System.out.printf(...)?

时间:2012-04-03 16:29:11

标签: java printf

我试图用Java将一个字符串对象传递给System.out.printf(...),但我一直收到这个错误"java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0",这对我来说实际上并没有多大意义。< / p>

String format = "%" + (3 * n) + "s"; // n is an int defined somewhere above, could be 0
System.out.printf(format, "My string");

有人知道这是否允许?

编辑以获取更多详细信息:

int n = 0;
String fm = "%" + (3 * level) + "s";
String realFm = "%0s";
System.out.println("fm = " + fm);
System.out.println("realfm = " + realFm);
System.out.println("equals? " + (fm.equals(realFm)));
System.out.printf(fm, " ");

这是输出:

fm = %0s
realfm = %0s
equals? true
java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0

由于

1 个答案:

答案 0 :(得分:11)

是的,这是允许的,但是如果n为0则无效。是否有可能发生这种情况(从错误信息中看起来如此)?

如果在代码中添加一行以进行调试,该怎么办:

// line added below for debugging. To remove later:
System.out.println("n is: " + n); 

String format = "%" + (3 * n) + "s"; // n is an int defined somewhere above
System.out.printf(format, "My string");

是否打印n is: 0?

如,

public static void main(String[] args) {

  // try the for loop with n = 0 vs. n = 1
  for (int n = 1; n <= 10; n++) {
     // line added below for debugging. To remove later:
     System.out.println("\nn is: " + n); 

     String format = "%" + (3 * n) + "s"; 
     System.out.printf(format, "My string");
  }      
}