簡體   English   中英

JAVA,使用String.format內插n次相同變量

[英]JAVA, interpolate n times the same variable with String.format

我想使用String.format方法對相同的變量進行n次插值。

例如與

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

我預計

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

您可以這樣做(在發生時受到限制):

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);

..沒有更清潔的方法嗎?

好吧,這取決於您要如何使用它。 如果要避免流,可以使用以下任何一種方法:

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"); 
    }
}

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

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

要獲得插值字符串,您還可以使用MessageFormat類:

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

您可以使用以下代碼段:

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

您可以使用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));
    }

您可以為格式令牌指定參數位置,在這種情況下,您將對所有令牌使用相同的位置:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM