JAVA, интерполировать n раз одну и ту же переменную с String.format - PullRequest
0 голосов
/ 03 марта 2019

Я хотел бы интерполировать одни и те же переменные n раз, используя метод String.format.

Например, с

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

Я ожидаю

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

Ответы [ 5 ]

0 голосов
/ 03 марта 2019

Вы можете использовать для цикла.см. код ниже.

    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));
    }
0 голосов
/ 03 марта 2019

.. Нет ли более чистого пути?

Ну, это зависит от того, как вы хотите его использовать;если вы хотите избежать потоков, вы можете использовать любой из следующих:

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"); 
    }
}
0 голосов
/ 03 марта 2019

Вы могли бы сделать это (хотя и закодированы с точки зрения возникновения):

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);
0 голосов
/ 03 марта 2019

Вы можете использовать ниже фрагмент:

String s = "hi";
    int n = 9;
    String interpolated  = String.format("%0"+ n +"d", 0).replace("0", s );
    System.out.println(interpolated );
0 голосов
/ 03 марта 2019

Если вы используете Java 11, вы можете использовать repeat() метод, такой как:

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

Чтобы получить интерполированную строку, вы также можете использовать MessageFormatкласс:

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