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

标签 java printf

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

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

谢谢

最佳答案

是的,它是允许的,但如果 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");
  }      
}

关于java - 为什么我不能将变量作为格式字符串传递给 Java 中的 System.out.printf (...)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9997512/

相关文章:

c - Arduino serial.print() 在实际字符后添加一个额外的字符

c - 逐个获取 vsnprintf() 输出

java - 如何传输用 Eclipse 编写的项目?

JavaFX - MenuItem 和按钮的相同操作处理程序

java - Java 中正则表达式的奇怪行为

java - 创建具有固定存在期限的自定义范围

c++ - sprintf 直接到 std::string?

c - 从 C 程序中通过管道将终端输出输出到文件

c - 如何打印格式化字符?

java - 混淆类级别和实例级别