我需要产生固定长度的字符串以生成基于字符位置的文件。缺少的字符必须用空格字符填充。
例如,字段CITY具有15个字符的固定长度。对于输入“芝加哥”和“里约热内卢”,输出为
“ 芝加哥” “ 里约热内卢”。
我需要产生固定长度的字符串以生成基于字符位置的文件。缺少的字符必须用空格字符填充。
例如,字段CITY具有15个字符的固定长度。对于输入“芝加哥”和“里约热内卢”,输出为
“ 芝加哥” “ 里约热内卢”。
Answers:
从Java 1.5开始,我们可以使用方法java.lang.String.format(String,Object ...)并使用类似于printf的格式。
格式字符串可以"%1$15s"
完成这项工作。其中1$
表示参数索引,s
表示参数是字符串,并且15
表示字符串的最小宽度。全部放在一起:"%1$15s"
。
对于一般方法,我们有:
public static String fixedLengthString(String string, int length) {
return String.format("%1$"+length+ "s", string);
}
也许有人可以建议另一个格式字符串来用特定字符填充空白处?
Maybe someone can suggest another format string to fill the empty spaces with an specific character?
-看一下我给的答案。
使用String.format
带有空格的填充,然后将其替换为所需的char。
String toPad = "Apple";
String padded = String.format("%8s", toPad).replace(' ', '0');
System.out.println(padded);
印刷品000Apple
。
更新性能更高的版本(因为它不依赖String.format
),而空格没有问题(提示给Rafael Borja)。
int width = 10;
char fill = '0';
String toPad = "New York";
String padded = new String(new char[width - toPad.length()]).replace('\0', fill) + toPad;
System.out.println(padded);
印刷品00New York
。
但是需要添加检查以防止尝试创建长度为负的char数组。
您还可以编写如下的简单方法
public static String padString(String str, int leng) {
for (int i = str.length(); i <= leng; i++)
str += " ";
return str;
}
对于右垫,您需要 String.format("%0$-15s", str)
即-
标志将“右”垫,没有-
标志将“左”垫
在这里看到我的例子
输入必须是字符串和数字
输入示例:Google 1
import org.apache.commons.lang3.StringUtils;
String stringToPad = "10";
int maxPadLength = 10;
String paddingCharacter = " ";
StringUtils.leftPad(stringToPad, maxPadLength, paddingCharacter)
比番石榴imo更好。从未见过使用Guava的单个企业Java项目,但是Apache String Utils非常常见。
该番石榴图书馆有Strings.padStart,你想要做什么,与其他许多有用的工具一起。
这是一个巧妙的把戏:
// E.g pad("sss","00000000"); should deliver "00000sss".
public static String pad(String string, String pad) {
/*
* Add the pad to the left of string then take as many characters from the right
* that is the same length as the pad.
* This would normally mean starting my substring at
* pad.length() + string.length() - pad.length() but obviously the pad.length()'s
* cancel.
*
* 00000000sss
* ^ ----- Cut before this character - pos = 8 + 3 - 8 = 3
*/
return (pad + string).substring(string.length());
}
public static void main(String[] args) throws InterruptedException {
try {
System.out.println("Pad 'Hello' with ' ' produces: '"+pad("Hello"," ")+"'");
// Prints: Pad 'Hello' with ' ' produces: ' Hello'
} catch (Exception e) {
e.printStackTrace();
}
}
这是带有测试用例的代码;):
@Test
public void testNullStringShouldReturnStringWithSpaces() throws Exception {
String fixedString = writeAtFixedLength(null, 5);
assertEquals(fixedString, " ");
}
@Test
public void testEmptyStringReturnStringWithSpaces() throws Exception {
String fixedString = writeAtFixedLength("", 5);
assertEquals(fixedString, " ");
}
@Test
public void testShortString_ReturnSameStringPlusSpaces() throws Exception {
String fixedString = writeAtFixedLength("aa", 5);
assertEquals(fixedString, "aa ");
}
@Test
public void testLongStringShouldBeCut() throws Exception {
String fixedString = writeAtFixedLength("aaaaaaaaaa", 5);
assertEquals(fixedString, "aaaaa");
}
private String writeAtFixedLength(String pString, int lenght) {
if (pString != null && !pString.isEmpty()){
return getStringAtFixedLength(pString, lenght);
}else{
return completeWithWhiteSpaces("", lenght);
}
}
private String getStringAtFixedLength(String pString, int lenght) {
if(lenght < pString.length()){
return pString.substring(0, lenght);
}else{
return completeWithWhiteSpaces(pString, lenght - pString.length());
}
}
private String completeWithWhiteSpaces(String pString, int lenght) {
for (int i=0; i<lenght; i++)
pString += " ";
return pString;
}
我喜欢TDD;)
String ItemNameSpacing = new String(new char[10 - masterPojos.get(i).getName().length()]).replace('\0', ' ');
printData += masterPojos.get(i).getName()+ "" + ItemNameSpacing + ": " + masterPojos.get(i).getItemQty() +" "+ masterPojos.get(i).getItemMeasure() + "\n";
快乐编码!
public static String padString(String word, int length) {
String newWord = word;
for(int count = word.length(); count < length; count++) {
newWord = " " + newWord;
}
return newWord;
}