ran*_*ana 15 java string format string-formatting
public class Divers {
public static void main(String args[]){
String format = "|%1$-10s|%2$-10s|%3$-20s|\n";
System.out.format(format, "FirstName", "Init.", "LastName");
System.out.format(format, "Real", "", "Gagnon");
System.out.format(format, "John", "D", "Doe");
String ex[] = { "John", "F.", "Kennedy" };
System.out.format(String.format(format, (Object[])ex));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
|FirstName |Init. |LastName |
|Real | |Gagnon |
|John |D |Doe |
|John |F. |Kennedy |
Run Code Online (Sandbox Code Playgroud)
我希望输出居中.如果我不使用' - '标志,则输出将与右侧对齐.
我没有在API中找到中心文本的标志.
该文章有关于格式的一些信息,但没有对中心自圆其说.
Sah*_*hoo 18
我很快就把它搞砸了.你现在可以使用StringUtils.center(String s, int size)了String.format.
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
import org.junit.Test;
public class TestCenter {
@Test
public void centersString() {
assertThat(StringUtils.center(null, 0), equalTo(null));
assertThat(StringUtils.center("foo", 3), is("foo"));
assertThat(StringUtils.center("foo", -1), is("foo"));
assertThat(StringUtils.center("moon", 10), is(" moon "));
assertThat(StringUtils.center("phone", 14, '*'), is("****phone*****"));
assertThat(StringUtils.center("India", 6, '-'), is("India-"));
assertThat(StringUtils.center("Eclipse IDE", 21, '*'), is("*****Eclipse IDE*****"));
}
@Test
public void worksWithFormat() {
String format = "|%1$-10s|%2$-10s|%3$-20s|\n";
assertThat(String.format(format, StringUtils.center("FirstName", 10), StringUtils.center("Init.", 10), StringUtils.center("LastName", 20)),
is("|FirstName | Init. | LastName |\n"));
}
}
class StringUtils {
public static String center(String s, int size) {
return center(s, size, ' ');
}
public static String center(String s, int size, char pad) {
if (s == null || size <= s.length())
return s;
StringBuilder sb = new StringBuilder(size);
for (int i = 0; i < (size - s.length()) / 2; i++) {
sb.append(pad);
}
sb.append(s);
while (sb.length() < size) {
sb.append(pad);
}
return sb.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
Mer*_*rez 14
public static String center(String text, int len){
String out = String.format("%"+len+"s%s%"+len+"s", "",text,"");
float mid = (out.length()/2);
float start = mid - (len/2);
float end = start + len;
return out.substring((int)start, (int)end);
}
public static void main(String[] args) throws Exception{
// Test
String s = "abcdefghijklmnopqrstuvwxyz";
for (int i = 1; i < 200;i++){
for (int j = 1; j < s.length();j++){
center(s.substring(0, j),i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是使用apache commons lang StringUtils的答案.
请注意,您必须将jar文件添加到构建路径.如果你正在使用maven,请确保在依赖项中添加公共语言.
import org.apache.commons.lang.StringUtils;
public class Divers {
public static void main(String args[]){
String format = "|%1$-10s|%2$-10s|%3$-20s|\n";
System.out.format(format, "FirstName", "Init.", "LastName");
System.out.format(format,StringUtils.center("Real",10),StringUtils.center("",10),StringUtils.center("Gagnon",20);
System.out.format(String.format(format, (Object[])ex));
}
}
Run Code Online (Sandbox Code Playgroud)
int spaceSize = n - s.length();\nint prefixSize = spaceSize / 2;\nint suffixSize = (spaceSize + 1) / 2\nRun Code Online (Sandbox Code Playgroud)\nreturn n > s.length()\n ? " ".repeat(prefixSize) + s + " ".repeat(suffixSize)\n : s;\nRun Code Online (Sandbox Code Playgroud)\n将上述变量内联到一个返回中,我们可以得到:
\n\n\n\n
returnn > s.length()\n?" ".repeat( (n - s.length() ) / 2)+s+" ".repeat( (n - s.length() + 1) / 2**)** \n:s;
Java 8 没有" ".repeat(10)方法。所以
只需将其替换" ".repeat(10)为 Java 8 模拟即可。请参阅/sf/answers/4026022311/,以及
使用相同的(与 Java 11 \xe2\x98\x9d\xef\xb8\x8f)alg:
\n int spaceSize = n - s.length();\n int prefixSize = spaceSize / 2;\n int suffixSize = (spaceSize + 1) / 2\n return n > s.length()\n ? space(prefixSize) + s + space(suffixSize)\n : s;\n\n\nprivate String space(int spaceSize) {\n return generate(() -> " ").limit(spaceSize).collect(joining());\n}\nRun Code Online (Sandbox Code Playgroud)\n小智 6
将在https://www.leveluplunch.com/java/examples/center-justify-string/上找到的代码转换为方便的小型单行函数:
public static String centerString (int width, String s) {
return String.format("%-" + width + "s", String.format("%" + (s.length() + (width - s.length()) / 2) + "s", s));
}
Run Code Online (Sandbox Code Playgroud)
用法:
public static void main(String[] args){
String out = centerString(10, "afgb");
System.out.println(out); //Prints " afgb "
}
Run Code Online (Sandbox Code Playgroud)
我认为这是一个非常简洁的解决方案,值得一提。
| 归档时间: |
|
| 查看次数: |
53878 次 |
| 最近记录: |