Я видел похожие вопросы здесь и здесь.
Но я не понимаю, как оставить строку с помощью нуля.
ввод: «129018» вывод: «0000129018»
Общая длина вывода должна быть TEN.
Я видел похожие вопросы здесь и здесь.
Но я не понимаю, как оставить строку с помощью нуля.
ввод: «129018» вывод: «0000129018»
Общая длина вывода должна быть TEN.
Если ваша строка содержит только числа, вы можете сделать ее целым числом, а затем выполнить заполнение:
String.format("%010d", Integer.parseInt(mystring));
Если не , я хотел бы знать, как это можно сделать.
%0
на %yourchoice
.
- person micnguyen; 24.05.2013
String.format()
поддерживает BigInteger
, например: String.format("%010d", new BigInteger("9999999999"))
- person real_paul; 23.12.2015
String paddedString = org.apache.commons.lang.StringUtils.leftPad("129018", 10, "0")
второй параметр - желаемая длина вывода
"0" - это символ заполнения
String
неизменяемо (см. Строка неизменяема. Что именно означает? < / i>), поэтому StringUtils.leftPad(variable, 10, "0");
не изменит значение variable
. Вам нужно будет присвоить ему результат, например: variable = StringUtils.leftPad(variable, 10, "0");
.
- person falsarella; 19.05.2015
Это будет дополнять оставленную строку до общей ширины 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, ответ хачика отлично работает. Если нет, то это возможная стратегия.
Вы можете использовать apache commons StringUtils
StringUtils.leftPad("129018", 10, "0");
Для форматирования строки используйте
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
Если вам нужна производительность и вы знаете максимальный размер строки, используйте это:
String zeroPad = "0000000000000000";
String str0 = zeroPad.substring(str.length()) + str;
Помните о максимальном размере строки. Если он больше размера StringBuffer, вы получите java.lang.StringIndexOutOfBoundsException
.
Старый вопрос, но у меня тоже есть два метода.
Для фиксированной (предопределенной) длины:
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();
}
Используйте 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"
Я предпочитаю этот код:
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"));
StrMgr.leftPad
добавляет отступ к строке, а StrMgr.rightPad
добавляется. Для меня (по крайней мере) я ожидал, что левая панель добавит отступ к передней части строки.
- person PassKit; 16.01.2017
Основываясь на ответе @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");
Вот еще один подход:
int pad = 4;
char[] temp = (new String(new char[pad]) + "129018").toCharArray()
Arrays.fill(temp, 0, pad, '0');
System.out.println(temp)
Вот мое решение:
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
Правое заполнение с фиксированной длиной-10: String.format ("% 1 $ -10s", "abc") Левое заполнение с фиксированной длиной-10: String.format ("% 1 $ 10s", "abc")
Вот решение на основе 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 '
Решение 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);
Это сработает в большинстве ситуаций
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());
}
}
Проверьте мой код, который будет работать для целых чисел и строк.
Предположим, что наше первое число - 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);
Я использовал это:
DecimalFormat numFormat = new DecimalFormat("00000");
System.out.println("Code format: "+numFormat.format(123));
Результат: 00123
Надеюсь, вы сочтете это полезным!
StringBuilder
, его значение по умолчанию - 16, и для больших форматированных размеров правильно установите размер буфера, например: StringBuilder sb = new StringBuilder();
- person Welington Veiga; 19.06.2012