Как я могу дополнить строку в Java? - PullRequest
388 голосов
/ 23 декабря 2008

Есть ли какой-нибудь простой способ дополнить строки в Java?

Похоже, что-то должно быть в каком-то StringUtil-подобном API, но я не могу найти ничего, что делает это.

Ответы [ 27 ]

1 голос
/ 30 ноября 2017

Используйте эту функцию.

private String leftPadding(String word, int length, char ch) {
   return (length > word.length()) ? leftPadding(ch + word, length, ch) : word;
}

как использовать?

leftPadding(month, 2, '0');

Выход: 01 02 03 04 .. 11 12

1 голос
/ 23 декабря 2008

java.util.Formatter сделает левый и правый отступ. Нет необходимости в нечетных сторонних зависимостях (вы хотели бы добавить их для чего-то такого тривиального).

[Я упустил подробности и сделал этот пост "вики сообщества", так как он не нужен мне.]

0 голосов
/ 19 января 2012

Простое решение будет:

package nl;
public class Padder {
    public static void main(String[] args) {
        String s = "123" ;
        System.out.println("#"+("     " + s).substring(s.length())+"#");
    }
}
0 голосов
/ 14 сентября 2017

Все строка операция обычно должна быть очень эффективной - особенно если вы работаете с большими наборами данных. Я хотел что-то быстрое и гибкое, похожее на то, что вы получите в команде plsql pad. Кроме того, я не хочу включать огромную библиотеку только для одной маленькой вещи. С учетом этих соображений ни одно из этих решений не было удовлетворительным. Это решения, которые я придумал, которые дали лучшие результаты тестирования производительности, если кто-то может улучшить его, пожалуйста, добавьте свой комментарий.

public static char[] lpad(char[] pStringChar, int pTotalLength, char pPad) {
    if (pStringChar.length < pTotalLength) {
        char[] retChar = new char[pTotalLength];
        int padIdx = pTotalLength - pStringChar.length;
        Arrays.fill(retChar, 0, padIdx, pPad);
        System.arraycopy(pStringChar, 0, retChar, padIdx, pStringChar.length);
        return retChar;
    } else {
        return pStringChar;
    }
}
  • обратите внимание, что он вызывается с помощью String.toCharArray (), и результат может быть преобразован в строку с новым результатом String ((char [])). Причина этого в том, что если вы применяете несколько операций, вы можете выполнять их все на char [] и не продолжать конвертацию между форматами - за кулисами String сохраняется как char []. Если бы эти операции были включены в сам класс String, он был бы в два раза эффективнее - по скорости и по памяти.
0 голосов
/ 01 сентября 2017

Java oneliners, никакой необычной библиотеки.

// 6 characters padding example
String pad = "******";
// testcases for 0, 4, 8 characters
String input = "" | "abcd" | "abcdefgh"

Pad Left, не ограничивать

result = pad.substring(Math.min(input.length(),pad.length())) + input;
results: "******" | "**abcd" | "abcdefgh"

Pad Right, не ограничивайте

result = input + pad.substring(Math.min(input.length(),pad.length()));
results: "******" | "abcd**" | "abcdefgh"

Левая накладка, ограничение длины площадки

result = (pad + input).substring(input.length(), input.length() + pad.length());
results: "******" | "**abcd" | "cdefgh"

Pad Right, ограничение длины площадки

result = (input + pad).substring(0, pad.length());
results: "******" | "abcd**" | "abcdef"
0 голосов
/ 28 марта 2013

Как это

Строка "hello" и требуемый отступ равен 15 с "0" left pad

String ax="Hello";
while(ax.length() < 15) ax="0"+ax;
0 голосов
/ 06 мая 2017

Простое решение без API будет выглядеть следующим образом:

public String pad(String num, int len){
    if(len-num.length() <=0) return num;
    StringBuffer sb = new StringBuffer();
    for(i=0; i<(len-num.length()); i++){
        sb.append("0");
    }
    sb.append(num);
    return sb.toString();
}
...