JAVA,使用String.format内插n次相同变量

时间:2019-03-03 12:49:14

标签: java string format interpolation string-interpolation

我想使用String.format方法对相同的变量进行n次插值。

例如,

String value = "hi";
String interpolated = String.format(" %s %s %s %s ", value);

我希望

System.out.println(interpolated)
// " hi hi hi hi "

6 个答案:

答案 0 :(得分:1)

您可以这样做(在发生时受阻):

String value = "hi";

String interpolated = String.format(" %s %s %s %s ", IntStream.range(0, 4)
                                                              .mapToObj(i -> value)
                                                              .toArray());

您可以通过以下方式使它可变:

 public String repeat(String string, int nbRepeat){
    return String.format(" " + IntStream.range(0, nbRepeat)
                                         .mapToObj(i -> "%s")
                                         .collect(Collectors.joining(" ")),
                          IntStream.range(0, nbRepeat)
                                   .mapToObj(
                                           i -> string)
                                   .toArray());
}

并使用它:

repeat("hi", 4);
repeat("ho", 6);

答案 1 :(得分:0)

如果您使用的是Java 11,则可以使用repeat()方法,例如:

String value = "hi ";
System.out.println(value.repeat(nTimes));

要获取插值字符串,您还可以使用MessageFormat类:

String interpolated = MessageFormat.format("{0}, {0}, {0}", "hi")

答案 2 :(得分:0)

您可以使用以下代码段:

String s = "hi";
    int n = 9;
    String interpolated  = String.format("%0"+ n +"d", 0).replace("0", s );
    System.out.println(interpolated );

答案 3 :(得分:0)

  

..有没有更清洁的方法?

取决于您的使用方式;如果要避免流,可以使用以下任何一种方法:

package sample;
import java.util.Arrays;
import java.util.Formatter;

public class JoinString {
    public static void main(String[] args) {
        String[] v = {"hi","hi","hi","hi"};
        System.out.println(String.join(" ", v));
        System.out.println(Arrays.asList(v));
        Formatter formatter = new Formatter();
        System.out.println( formatter.format("%1$1s %1$1s %1$1s", "hi"));
        formatter.close();
        System.out.format("%1$1s %1$1s %1$1s %n", "hi"); 
    }
}

答案 4 :(得分:0)

您可以使用for循环。请参阅下面的代码。

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter word : ");
    String str = sc.next();
    System.out.println("times : ");

    int n = sc.nextInt();
    for(int i =0 ; i < n; i++){
        System.out.print(String.format("%s ", str));
    }

答案 5 :(得分:0)

您可以为格式令牌指定参数位置,在这种情况下,您将对所有令牌使用相同的位置:

String interpolated = String.format(" %1$s %1$s %1$s %1$s ", value);