Левый отступ строки с нулями
397443 просмотра
20 ответа
Я видел похожие вопросы здесь и здесь .
Но я не понимаю, как оставить строку с нулем.
вход: «129018» выход: «0000129018»
Общая длина выхода должна быть ДЕСЯТЬ.
Автор: jai Источник Размещён: 12.11.2019 09:56Ответы (20)
344 плюса
Если ваша строка содержит только цифры, вы можете сделать ее целым числом, а затем выполнить заполнение:
String.format("%010d", Integer.parseInt(mystring));
Если нет, я хотел бы знать, как это можно сделать .
Автор: khachik Размещён: 17.12.2010 10:49135 плюса
String paddedString = org.apache.commons.lang.StringUtils.leftPad("129018", 10, "0")
второй параметр - желаемая длина вывода
«0» - символ заполнения
Автор: Oliver Michels Размещён: 17.12.2010 10:57101 плюса
Это позволит заполнить любую строку общей шириной 10, не беспокоясь об ошибках разбора:
String unpadded = "12345";
String padded = "##########".substring(unpadded.length()) + unpadded;
//unpadded is "12345"
//padded is "#####12345"
Если вы хотите набить правильно:
String unpadded = "12345";
String padded = unpadded + "##########".substring(unpadded.length());
//unpadded is "12345"
//padded is "12345#####"
Вы можете заменить символы "#" любым символом, который вы хотите добавить, повторяя количество раз, которое вы хотите, чтобы общая ширина строки была. Например, если вы хотите добавить нули слева, чтобы длина всей строки составляла 15 символов:
String unpadded = "12345";
String padded = "000000000000000".substring(unpadded.length()) + unpadded;
//unpadded is "12345"
//padded is "000000000012345"
Преимущество этого по сравнению с ответом Хачика заключается в том, что он не использует Integer.parseInt, который может вызвать исключение (например, если число, которое вы хотите заполнить, слишком велико, например, 12147483647). Недостатком является то, что если то, что вы заполняете, уже является int, то вам придется преобразовать его в String и обратно, что нежелательно.
Так что, если вы точно знаете, что это int, ответ Хачика отлично работает. Если нет, то это возможная стратегия.
Автор: Rick Hanlon II Размещён: 27.02.2013 10:5451 плюса
String str = "129018";
StringBuilder sb = new StringBuilder();
for (int toPrepend=10-str.length(); toPrepend>0; toPrepend--) {
sb.append('0');
}
sb.append(str);
String result = sb.toString();
Автор: thejh
Размещён: 17.12.2010 10:47
50 плюса
String str = "129018";
String str2 = String.format("%10s", str).replace(' ', '0');
System.out.println(str2);
Автор: Satish
Размещён: 25.05.2011 08:29
16 плюса
Вы можете использовать Apache Commons StringUtils
StringUtils.leftPad("129018", 10, "0");
Автор: thk
Размещён: 17.12.2010 11:02
13 плюса
Для форматирования String используйте
import org.apache.commons.lang.StringUtils;
public class test {
public static void main(String[] args) {
String result = StringUtils.leftPad("wrwer", 10, "0");
System.out.println("The String : " + result);
}
}
Выход: строка: 00000wrwer
Если первый аргумент - это строка, которую нужно отформатировать, второй аргумент - это длина желаемой выходной длины, а третий аргумент - это символ, с которым строка должна быть дополнена.
Используйте ссылку, чтобы скачать банку http://commons.apache.org/proper/commons-lang/download_lang.cgi
10 плюса
Если вам нужна производительность и вы знаете максимальный размер строки, используйте это:
String zeroPad = "0000000000000000";
String str0 = zeroPad.substring(str.length()) + str;
Помните о максимальном размере строки. Если он больше, чем размер StringBuffer, вы получите java.lang.StringIndexOutOfBoundsException
.
4 плюса
Старый вопрос, но у меня тоже есть два метода.
Для фиксированной (предопределенной) длины:
public static String fill(String text) {
if (text.length() >= 10)
return text;
else
return "0000000000".substring(text.length()) + text;
}
Для переменной длины:
public static String fill(String text, int size) {
StringBuilder builder = new StringBuilder(text);
while (builder.length() < size) {
builder.append('0');
}
return builder.toString();
}
Автор: Carlos Heuberger
Размещён: 25.05.2011 09:05
4 плюса
Используйте Google Guava :
Maven:
<dependency>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
<version>14.0.1</version>
</dependency>
Образец кода:
Strings.padStart("129018", 10, '0') returns "0000129018"
Автор: Tho
Размещён: 03.05.2015 07:44
4 плюса
Я предпочитаю этот код:
public final class StrMgr {
public static String rightPad(String input, int length, String fill){
String pad = input.trim() + String.format("%"+length+"s", "").replace(" ", fill);
return pad.substring(0, length);
}
public static String leftPad(String input, int length, String fill){
String pad = String.format("%"+length+"s", "").replace(" ", fill) + input.trim();
return pad.substring(pad.length() - length, pad.length());
}
}
а потом:
System.out.println(StrMgr.leftPad("hello", 20, "x"));
System.out.println(StrMgr.rightPad("hello", 20, "x"));
Автор: strobering
Размещён: 16.09.2016 05:35
3 плюса
Основываясь на ответе @Haroldo Macêdo , я создал метод в своем собственном Utils
классе, такой как
/**
* Left padding a string with the given character
*
* @param str The string to be padded
* @param length The total fix length of the string
* @param padChar The pad character
* @return The padded string
*/
public static String padLeft(String str, int length, String padChar) {
String pad = "";
for (int i = 0; i < length; i++) {
pad += padChar;
}
return pad.substring(str.length()) + str;
}
Тогда позвони Utils.padLeft(str, 10, "0");
2 плюса
Вот еще один подход:
int pad = 4;
char[] temp = (new String(new char[pad]) + "129018").toCharArray()
Arrays.fill(temp, 0, pad, '0');
System.out.println(temp)
Автор: nullpotent
Размещён: 19.08.2013 05:38
2 плюса
Вот мое решение:
String s = Integer.toBinaryString(5); //Convert decimal to binary
int p = 8; //preferred length
for(int g=0,j=s.length();g<p-j;g++, s= "0" + s);
System.out.println(s);
Выход: 00000101
Автор: sh3r1 Размещён: 24.08.2016 07:301 плюс
Правый отступ с фиксированной длиной-10: String.format ("% 1 $ -10s", "abc") Левый отступ с фиксированной длиной-10: String.format ("% 1 $ 10s", "abc")
Автор: Arun Размещён: 20.11.2014 11:221 плюс
Вот решение на основе String.format, которое будет работать для строк и подходит для переменной длины.
public static String PadLeft(String stringToPad, int padToLength){
String retValue = null;
if(stringToPad.length() < padToLength) {
retValue = String.format("%0" + String.valueOf(padToLength - stringToPad.length()) + "d%s",0,stringToPad);
}
else{
retValue = stringToPad;
}
return retValue;
}
public static void main(String[] args) {
System.out.println("'" + PadLeft("test", 10) + "'");
System.out.println("'" + PadLeft("test", 3) + "'");
System.out.println("'" + PadLeft("test", 4) + "'");
System.out.println("'" + PadLeft("test", 5) + "'");
}
Вывод: '000000test' 'test' 'test' '0test'
Автор: P.V.M. Kessels Размещён: 29.07.2015 07:251 плюс
Решение от Satish очень хорошо среди ожидаемых ответов. Я хотел сделать его более общим, добавив переменную n в строку формата вместо 10 символов.
int maxDigits = 10;
String str = "129018";
String formatString = "%"+n+"s";
String str2 = String.format(formatString, str).replace(' ', '0');
System.out.println(str2);
Это будет работать в большинстве ситуаций
Автор: Prabhu Размещён: 02.03.2016 04:300 плюса
int number = -1;
int holdingDigits = 7;
System.out.println(String.format("%0"+ holdingDigits +"d", number));
Просто спросил это в интервью ........
Мой ответ ниже, но этот (упомянутый выше) намного приятнее->
String.format("%05d", num);
Мой ответ:
static String leadingZeros(int num, int digitSize) {
//test for capacity being too small.
if (digitSize < String.valueOf(num).length()) {
return "Error : you number " + num + " is higher than the decimal system specified capacity of " + digitSize + " zeros.";
//test for capacity will exactly hold the number.
} else if (digitSize == String.valueOf(num).length()) {
return String.valueOf(num);
//else do something here to calculate if the digitSize will over flow the StringBuilder buffer java.lang.OutOfMemoryError
//else calculate and return string
} else {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < digitSize; i++) {
sb.append("0");
}
sb.append(String.valueOf(num));
return sb.substring(sb.length() - digitSize, sb.length());
}
}
Автор: bockymurphy
Размещён: 26.04.2013 02:19
0 плюса
Проверьте мой код, который будет работать для целых чисел и строк.
Предположим, что наше первое число - 129018. И мы хотим добавить к этому нули, чтобы длина конечной строки была 10. Для этого вы можете использовать следующий код
int number=129018;
int requiredLengthAfterPadding=10;
String resultString=Integer.toString(number);
int inputStringLengh=resultString.length();
int diff=requiredLengthAfterPadding-inputStringLengh;
if(inputStringLengh<requiredLengthAfterPadding)
{
resultString=new String(new char[diff]).replace("\0", "0")+number;
}
System.out.println(resultString);
Автор: Fathah Rehman P
Размещён: 24.07.2014 10:31
0 плюса
Я использовал это:
DecimalFormat numFormat = new DecimalFormat("00000");
System.out.println("Code format: "+numFormat.format(123));
Результат: 00123
Я надеюсь, что вы найдете это полезным!
Автор: Carlos Muñoz Размещён: 27.06.2016 09:37Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- java Почему я не могу объявить статические методы в интерфейсе?
- string В чем разница между строкой и строкой в ??C #?
- string Почему в Ruby нет реального StringBuffer или StringIO?
- string Преобразовать строку в перечисление в C #
- string Самый эффективный способ объединения строк?
- string Экранирование строк HTML с помощью jQuery
- padding Как я могу дополнить строку в Java?
- padding WPF: сетка с полем столбца / строки / дополнением?
- padding Заполнение внутри входов разрывает ширину 100%
- padding Когда использовать margin vs padding в CSS
- padding Избавиться от пробелов между пролетами
- padding Winforms, создание отступов при использовании свойств Dock