Java';s格式说明符重复打印输出

Java';s格式说明符重复打印输出,java,format,Java,Format,我已经编写了一个Java程序来打印从1到10的数字,并使用空格格式。使用java.util.Formatter,我没有得到预期的输出。为什么? 预期产出为: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 这是我的代码: import java.util.*; public class CountTo10 { static void formatterFunc() { String mySt

我已经编写了一个Java程序来打印从1到10的数字,并使用空格格式。使用
java.util.Formatter
,我没有得到预期的输出。为什么?

预期产出为:

1 2 3 4 5 6 7 8 9 10 
   1   2   3   4   5   6   7   8   9  10
这是我的代码:

import java.util.*;

public class CountTo10 {
    static void formatterFunc() {
        String myString = "";
        Formatter fmt = new Formatter();

        for(int i=1; i<=10; i++) {
            fmt.format("%4d", i);
            myString = myString + fmt;
        }
        System.out.println(myString);
    }

    static void stringFunc() {
        String myString = "";
        for(int i=1; i<=10; i++) {
            myString = myString + i + " ";
        }
        System.out.println(myString);
    }

    public static void main(String args[]) {
        stringFunc();
        System.out.println("\n");
        formatterFunc();
    }
}
import java.util.*;
公共类计数为10{
静态void formatterFunc(){
字符串myString=“”;
格式化程序fmt=新格式化程序();

对于(int i=1;ijava.util.Formatter的一些构造函数
可追加的
作为参数。但是根据默认构造函数(您正在使用的)使用
StringBuilder
StringBuilder
实现
可追加的

格式化输出的目标是StringBuilder

因此,每次调用
fmt.format()

您的修复选项包括:

  • 不要使用
    字符串
    串联,只使用
    格式化程序

    static void formatterFunc() {
        try(Formatter fmt = new Formatter()) {  // Formatter should also be properly closed
            for(int i=1; i<=10; i++) {
                fmt.format("%4d", i);
            }
            System.out.println(fmt);
        }
    }
    
  • 提供您自己的可附加的

    static void formatterFunc() {
        StringBuilder sb = new StringBuilder();
        try(Formatter fmt = new Formatter(sb)) {  // Formatter should be properly closed
            for(int i=1; i<=10; i++) {
                fmt.format("%4d", i);
            }
        }
        System.out.println(sb.toString()); // We can print this even after Formatter has been closed
    }
    
    static void formatterFunc(){
    StringBuilder sb=新的StringBuilder();
    try(Formatter fmt=new Formatter(sb)){//应正确关闭格式化程序
    
    对于(int i=1;ijava.util.Formatter的一些构造函数
    可追加的
    作为参数。但是根据默认构造函数(您正在使用的)使用
    StringBuilder
    StringBuilder
    实现
    可追加的

    格式化输出的目标是StringBuilder

    因此,每次调用
    fmt.format()

    您的修复选项包括:

  • 不要使用
    字符串
    串联,只使用
    格式化程序

    static void formatterFunc() {
        try(Formatter fmt = new Formatter()) {  // Formatter should also be properly closed
            for(int i=1; i<=10; i++) {
                fmt.format("%4d", i);
            }
            System.out.println(fmt);
        }
    }
    
  • 提供您自己的可附加的

    static void formatterFunc() {
        StringBuilder sb = new StringBuilder();
        try(Formatter fmt = new Formatter(sb)) {  // Formatter should be properly closed
            for(int i=1; i<=10; i++) {
                fmt.format("%4d", i);
            }
        }
        System.out.println(sb.toString()); // We can print this even after Formatter has been closed
    }
    
    static void formatterFunc(){
    StringBuilder sb=新的StringBuilder();
    try(Formatter fmt=new Formatter(sb)){//应正确关闭格式化程序
    对于(int i=1;i