Java генерирует пустую строку

#java

#java

Вопрос:

есть ли более эффективный способ сгенерировать строку, полную пробелов, с настраиваемым размером, например, следующим:

 private String getBlanks (int numberOfBlanks)
    {
        String theBlanks = "";
        for (int i = 0; i < numberOfBlanks; i  )
        {
            theBlanks = theBlanks   " ";
        }
        return theBlanks;
    }
  

Возможно, с помощью StringBuilder или любого другого типа?

РЕДАКТИРОВАТЬ: Поскольку у нас есть Appache Commons Lang, наиболее удобный способ сделать это — использовать строковые утилиты — leftPad, спасибо всем за ответы!

Спасибо

Комментарии:

1. Каким образом эффективно? Сложность кодирования или время выполнения? В любом случае, вопрос почти спорный с точки зрения того, почему его нужно было бы сделать более эффективным.

2. Я не согласен с этим. Хотя это не было бы ужасным преступлением против человечества, если бы сделать это таким образом, совсем не аккуратно манипулировать строками таким образом. Приведенный ниже ответ Amines — это (IMO) способ сделать это.

3. @Tejs больше относится ко времени выполнения

4. Кстати, рассмотрите возможность использования StrBuilder (часть apache commons lang) вместо StringBuilder. это сокращение замены, и люди из Apache утверждают, что это лучше (в общем, я верю им на слово).

Ответ №1:

Может быть, вот так:

 private String getBlanks(int numberOfBlanks) {
       char[] chars = new char[numberOfBlanks];
       Arrays.fill(chars, (char)32);
       return new String(chars);
}
  

Комментарии:

1. Очень умно (и какая-то действительно длинная фраза, чтобы я мог ее опубликовать).

Ответ №2:

С помощью Guava

 String blanks = Strings.repeat(" ", numOfblanks);
  

Ответ №3:

Быстрый взлом с помощью StringUtils:

 return StringUtils.leftPad("", numberOfBlanks, ' ');
  

Комментарии:

1. О, я забыл сказать, для этого вам нужен Apache Commons Lang

2. У нас есть Appache Commons, и я нахожу этот способ наиболее эффективным 🙂

Ответ №4:

Прежде всего — используйте StringBuilder , а затем верните StringBuilder.toString

Ответ №5:

Вам нужен StringBuilder:

 private String getBlanks (int numberOfBlanks)
    {
        StringBuilder theBlanks = new StringBuilder(numberOfBlanks);
        for (int i = 0; i < numberOfBlanks; i  ) theBlanks.append(" ");
        return theBlanks.toString();
    }
  

Ответ №6:

 String getBlankString(int length){
  StringBuffer sb=new StringBuffer(length);

  for(int i=0;i<length;i  ){
    sb.append(" ");
  }
  return sb.toString();
}
  

Комментарии:

1. StringBuffer потокобезопасен, это необходимо только в определенных случаях, в противном случае это только добавляет дополнительную блокировку.

Ответ №7:

 private String getBlanks (int numberOfBlanks) {
    StringBuilder sb = new StringBuilder();
    sb.setLength(numberOfBlanks);
    sb.replace(0, numberOfBlanks-1, " ");

    return sb.toString();
}