Create a string with n characters

前端 未结 27 948
猫巷女王i
猫巷女王i 2020-11-28 22:12

Is there a way in java to create a string with a specified number of a specified character? In my case, I would need to create a string with 10 spaces. My current code is:

相关标签:
27条回答
  • 2020-11-28 22:35

    In most cases you only need Strings upto a certains length, say 100 spaces. You could prepare an array of Strings where the index number is equal to the size of the space-filled string and lookup the string, if the required length is within the limits or create it on demand if it's outside the boundary.

    0 讨论(0)
  • 2020-11-28 22:36

    how about this?

    public String fillSpaces(int len) {
        /* the spaces string should contain spaces exceeding the max needed */  
        String spaces = "                                                   ";
        return spaces.substring(0,len);
    }
    

    EDIT: I've written a simple code to test the concept and here what i found.

    Method 1: adding single space in a loop:

      public String execLoopSingleSpace(int len){
        StringBuilder sb = new StringBuilder();
    
        for(int i=0; i < len; i++) {
            sb.append(' ');
        }
    
        return sb.toString();
      }
    

    Method 2: append 100 spaces and loop, then substring:

      public String execLoopHundredSpaces(int len){
        StringBuilder sb = new StringBuilder("          ")
                .append("          ").append("          ").append("          ")
                .append("          ").append("          ").append("          ")
                .append("          ").append("          ").append("          ");
    
        for (int i=0; i < len/100 ; i++) {
            sb.append("          ")
                .append("          ").append("          ").append("          ")
                .append("          ").append("          ").append("          ")
                .append("          ").append("          ").append("          ");
        }
    
        return sb.toString().substring(0,len);
      }
    

    The result I get creating 12,345,678 spaces:

    C:\docs\Projects> java FillSpace 12345678
    method 1: append single spaces for 12345678 times. Time taken is **234ms**. Length of String is 12345678
    method 2: append 100 spaces for 123456 times. Time taken is **141ms**. Length of String is 12345678
    Process java exited with code 0
    

    and for 10,000,000 spaces:

    C:\docs\Projects> java FillSpace 10000000
    method 1: append single spaces for 10000000 times. Time taken is **157ms**. Length of String is 10000000
    method 2: append 100 spaces for 100000 times. Time taken is **109ms**. Length of String is 10000000
    Process java exited with code 0
    

    combining direct allocation and iteration always takes less time, on average 60ms less when creating huge spaces. For smaller sizes, both results are negligible.

    But please continue to comment :-)

    0 讨论(0)
  • 2020-11-28 22:39

    Use StringUtils: StringUtils.repeat(' ', 10)

    0 讨论(0)
  • 2020-11-28 22:41

    Just replace your StringBuffer with a StringBuilder. Hard to beat that.

    If your length is a big number, you might implement some more efficient (but more clumsy) self-appendding, duplicating the length in each iteration:

     public static String dummyString(char c, int len) {
      if( len < 1 ) return "";
      StringBuilder sb = new StringBuilder(len).append(c);
      int remnant = len - sb.length();
      while(remnant  > 0) {
       if( remnant  >= sb.length() ) sb.append(sb);
       else sb.append(sb.subSequence(0, remnant));
       remnant  = len - sb.length();
      }
      return sb.toString();
     }
    

    Also, you might try the Arrays.fill() aproach (FrustratedWithFormsDesigner's answer).

    0 讨论(0)
  • 2020-11-28 22:42

    In Java 8 you can use String.join:

    String.join("", Collections.nCopies(n, s));
    
    0 讨论(0)
  • 2020-11-28 22:42

    I think this is the less code it's possible, it uses Guava Joiner class:

    Joiner.on("").join(Collections.nCopies(10, " "));

    0 讨论(0)
提交回复
热议问题