Raf*_*rja 85 java string formatting
我需要生成固定长度的字符串来生成基于字符位置的文件.缺少的字符必须填充空格字符.
例如,字段CITY具有15个字符的固定长度.输入"芝加哥"和"里约热内卢"的输出是
" Chicago" " Rio de Janeiro".
Raf*_*rja 114
从Java 1.5开始,我们可以使用方法java.lang.String.format(String,Object ...)并使用类似printf的格式.
格式字符串"%1$15s"
完成工作.Where 1$
表示参数索引,s
表示参数是String并15
表示String 的最小宽度.把它们放在一起:"%1$15s"
.
对于一般方法,我们有:
public static String fixedLengthString(String string, int length) {
return String.format("%1$"+length+ "s", string);
}
Run Code Online (Sandbox Code Playgroud)
也许有人可以建议另一个格式字符串用特定字符填充空白区域?
mik*_*ike 52
利用String.format
空格填充并用所需的字符替换它们.
String toPad = "Apple";
String padded = String.format("%8s", toPad).replace(' ', '0');
System.out.println(padded);
Run Code Online (Sandbox Code Playgroud)
打印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);
Run Code Online (Sandbox Code Playgroud)
打印00New York
.
但是需要添加一个检查以防止尝试创建负长度的char数组.
Kur*_*wig 25
此代码将具有给定数量的字符; 填充空格或在右侧截断:
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);
}
Run Code Online (Sandbox Code Playgroud)
Yas*_*gla 11
你也可以写一个简单的方法,如下所示
public static String padString(String str, int leng) {
for (int i = str.length(); i <= leng; i++)
str += " ";
return str;
}
Run Code Online (Sandbox Code Playgroud)
Bui*_*goc 11
对于正确的垫你需要String.format("%0$-15s", str)
- 标志将做正确的垫非 - 将做左垫
看看我的例子
输入必须是字符串和数字
示例输入:Google 1
ano*_*932 10
import org.apache.commons.lang3.StringUtils;
String stringToPad = "10";
int maxPadLength = 10;
String paddingCharacter = " ";
StringUtils.leftPad(stringToPad, maxPadLength, paddingCharacter)
Run Code Online (Sandbox Code Playgroud)
比Guava imo更好的方式.从未见过使用Guava但Apache String Utils的单个企业Java项目非常常见.
String.format("%15s",s) // pads right
String.format("%-15s",s) // pads left
Run Code Online (Sandbox Code Playgroud)
很棒的总结在这里
这是一个巧妙的技巧:
// 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();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
175494 次 |
最近记录: |