Преобразование из целочисленного значения в StringBuffer с нулями в качестве значения по умолчанию - PullRequest
0 голосов
/ 09 сентября 2011

Я пытаюсь сформировать StringBuffer с начальным значением 00000 ..

Моя проблема заключается в том, что начальное значение зависит от целочисленной переменной и основано на значении целочисленной переменной, которое должно содержать много нулейбыть там в StringBuffer ..

Например, int length = 9, поэтому мой StringBuffer должен формироваться с 000000000 .... (9 нулей) ...

Я не получаю выхода изЭта проблема.Может кто-нибудь, пожалуйста, подскажите мне об этом.

Один из способов, который я выяснил, - это получить целочисленное значение и сохранить столько значений в массиве String, а затем записать массив строк в StringBuffer, но, похоже, это очень неэффективный метод.Пожалуйста, ведите меня.

Ответы [ 5 ]

1 голос
/ 09 сентября 2011

Вот вспомогательный метод, который вы можете использовать:

public StringBuilder repeatChars(StringBuilder sb, char c, int n) {
    for (int i = 0; i < n; ++i) {
        sb.append(c);
    }

    return sb;
}

Назовите его так:

StringBuilder sb = new StringBuilder();

// Add nine zeroes
repeatChars(sb, '0', 9);

Примечание: я заставил его вернуть StringBuilder, чтобы вы могли связать методзвонки.

Лучше использовать StringBuilder вместо StringBuffer, потому что StringBuilder не имеет ненужной синхронизации, которая есть у StringBuffer.

На самом деле другого нет, большеэффективный способ, чем сделать это с помощью цикла.Не беспокойтесь о микрооптимизации (опасаясь, что простые операторы недостаточно эффективны).

1 голос
/ 09 сентября 2011
int numZeroes = 5;
StringBuilder sb = new StringBuilder();

for (int i = 0; i < numZeroes; i++)
{
    sb.append('0');
}
0 голосов
/ 09 сентября 2011

Поздний ответ и, возможно, бесполезный, но , если вы используете Apache Commons Lang, и во многих значимых Java-проектах у вас есть то, что вы хотите с их StrBuilder, особенно с appendPadding метод.

Вы можете написать:

StrBuilder b = new StrBuilder();
b.appendPadding(9, '0').append(...).append(...)....
0 голосов
/ 09 сентября 2011

Я не уверен, что есть что-то, что можно сделать в одной строке, но вы можете использовать:

StringBuffer buffer = new StringBuffer(length);
for (int i = 0; i < length; i++)
{
    buffer.append('0');
}

подозреваю добавление char незначительно более эффективночем добавление строки, так как нет необходимости проверять недействительность и длина известна. Однако это не будет иметь большого значения.)

Если вы используете Java 5 или выше, обычно лучше использовать StringBuilder чем StringBuffer, кстати, чтобы у вас не было ненужной синхронизации.

Это использует длину в качестве начальной емкости, что хорошо, если вы не собираетесь больше добавлять -но если вы собираетесь добавить данные впоследствии, измените их соответствующим образом, чтобы увеличить емкость.

0 голосов
/ 09 сентября 2011

Если вы не застряли с Java 1.4.2 (или более ранней) или у вас есть очень специфическая причина для использования StringBuffer, вы почти всегда должны использовать StringBuilder вместо.

Что не так с тривиальным циклом:

StringBuilder buf = new StringBuilder(length); // might want to use more if you know that you'll append something
for (int i = 0; i < length; i++) {
  buf.append('0');
}

И если вы знаете максимальное количество нулей для использования, то вы можете сделать это:

// make sure never to change the content of this
private static final char[] ZEROES = new char[] { '0', '0', '0', '0', '0', '0', '0', '0', '0' };

// when you need the zeroes do this:
StringBuilder buf = new StringBuilder(length);
buf.append(ZEROES, 0, length);
...