生成固定长度的填充空格的string

我需要生成固定长度的string来生成基于字符位置的文件。 缺less的字符必须填充空格字符。

例如,CITY字段的固定长度为15个字符。 对于input“芝加哥”和“里约热内卢”的输出是

  “ 芝加哥”
 “ 里约热内卢” 

从Java 1.5开始,我们可以使用java.lang.String.format(String,Object …)方法,并使用printf格式。

格式string"%1$15s"完成这项工作。 其中1$表示参数索引, s表示参数是一个string, 15表示string的最小宽度。 把它放在一起: "%1$15s"

对于一般的方法,我们有:

 public static String fixedLengthString(String string, int length) { return String.format("%1$"+length+ "s", string); } 

也许有人可以build议另一个格式string来填充空白空间与特定的字符?

利用String.format的填充空格,并将其replace为所需的字符。

 String toPad = "Apple"; String padded = String.format("%8s", toPad).replace(' ', '0'); System.out.println(padded); 

打印000Apple


更新更高性能的版本(因为它不依赖于String.format ),没有问题的空间(THX拉斐尔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

但是需要添加一个检查来防止尝试创build一个长度为负的char数组。

你也可以写一个简单的方法,如下所示

 public static String padString(String str, int leng) { for (int i = str.length(); i <= leng; i++) str += " "; return str; } 

这个代码将具有特定数量的字符; 在右侧填充空格或截断:

 private String leftpad(String text, int length) { return String.format("%" + length + "." + length + "s", text); } private String rightpad(String text, int length) { return String.format("%-" + length + "." + length + "s", text); } 

Guava图书馆有Strings.padStart ,正是你想要的,以及许多其他有用的工具。

对于右垫你需要String.format("%0$-15s", str) – 符号将做右垫非 – 将做左垫

看到我的例子在这里

http://pastebin.com/w6Z5QhnJ

input必须是一个string和一个数字

示例input:Google 1

 import org.apache.commons.lang3.StringUtils; String stringToPad = "10"; int maxPadLength = 10; String paddingCharacter = " "; StringUtils.leftPad(stringToPad, maxPadLength, paddingCharacter) 

比番石榴更好。 从未见过使用Guava的单个企业Java项目,但Apache String Utils非常普遍。

这是一个巧妙的把戏:

 // Eg 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(); } } 

这里是testing用例的代码;):

 @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;)

 public static String padString(String word, int length) { String newWord = word; for(int count = word.length(); count < length; count++) { newWord = " " + newWord; } return newWord; } 

这段代码很好用。 预期产出

  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"; 

快乐编码!