生成固定长度的填充空格的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)
– 符号将做右垫非 – 将做左垫
看到我的例子在这里
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";
快乐编码!