【问题标题】:JAVA, interpolate n times the same variable with String.formatJAVA,用String.format对同一个变量进行n次插值
【发布时间】:2019-03-03 12:49:14
【问题描述】:

我想使用 String.format 方法插入相同的变量 n 次。

例如

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

我期待

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

【问题讨论】:

  • 试试String.format(" %s %s %s %s ", value, value, value, value)
  • 你也可以尝试使用for循环。
  • @Daniele 没有更干净的方法吗?

标签: java string format interpolation string-interpolation


【解决方案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);

【讨论】:

    【解决方案2】:

    ..没有更干净的方法吗?

    这取决于你想如何使用它;如果你想避免流,你可以使用以下任何一种:

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

    【讨论】:

      【解决方案3】:

      你可以使用下面的sn-p:

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

      【讨论】:

        【解决方案4】:

        你可以使用 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】:

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

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

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

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

          【讨论】:

          • 我需要插值来使用该字符串,而不是仅用于打印
          • @tommasoballardini 更新为MessageFormat.format 方法
          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-08-15
            • 1970-01-01
            • 1970-01-01
            • 2019-04-28
            • 2022-12-01
            • 2020-08-27
            • 1970-01-01
            相关资源
            最近更新 更多