如何在Java中填充字符串?

7 浏览
0 Comments

如何在Java中填充字符串?

在Java中是否有一种简单的方式可以填充字符串?

这似乎是应该在类似StringUtil的API中存在的东西,但我找不到任何可以实现这个功能的方法。

0
0 Comments

如何在Java中填充字符串?

在Java中,可以使用Apache的StringUtils类中的leftPad、rightPad、center和repeat方法来填充字符串。然而,请注意,正如其他人在这个答案中提到和演示的那样,使用String.format()和JDK中的Formatter类是更好的选择。如果JDK版本能够完成工作,就应该优先使用它们,而不是使用外部库。

java.util.Formatter(以及String.format())可以完成这个任务。如果JDK版本能够完成工作,就应该优先选择JDK而不是外部库。

出于几个原因,我现在更喜欢使用Guava而不是Apache Commons。这个答案展示了如何在Guava中进行字符串填充。

你能列举一些你的原因吗?这些API看起来基本相同。

对于像字符串填充这样的单个实用程序,使用哪个库实际上并没有太大区别。不过,Guava是一个更现代、更清晰并且文档更好的库,相比于Apache Commons项目中的各种库(如Commons Lang、Commons Collections、Commons IO等)。它也是由非常聪明的人(如Kevin Bourrillion等)构建的,其中许多人在Stack Overflow上非常活跃。我自己多年前就用Guava替换了各种Apache Commons库,并且一直没有后悔过。

在这个问题中,有一些很好的进一步阅读材料。

当填充的大小是一个运行时变量时,StringUtils/Strings仍然是更好的选择。

0
0 Comments

问题的原因是需要在Java中如何对字符串进行填充。文章提供了两种解决方法。

第一种方法是将字符串填充到指定的长度。通过使用String.format()函数和replace()函数,可以实现将字符串填充到指定长度,并将空格替换为指定字符。通过在format()函数中指定格式化字符串的长度,然后使用replace()函数将空格替换为指定字符来实现填充。

第二种方法是在密码中显示特定字符。通过使用String.format()函数和replace()函数,可以将密码字符串的长度作为参数传递给format()函数,并使用replace()函数将空格替换为指定字符。这样可以确保输出的字符串与密码字符串的长度相同,并实现密码的隐藏。

然后,文章还提到了一些关于解决方法的讨论。其中一些评论指出,第一种解决方法对于包含空格的字符串不适用。作者也承认了这个问题,并提供了在不改变输入字符串的情况下实现填充的更好解决方法。该方法使用Java的原生功能,允许自定义左填充和右填充字符串。

最后,文章还提供了一个用于处理只包含单个空格的字符串的解决方法。可以使用正则表达式的look behind/ahead功能,将空格替换为指定字符。

总结起来,这篇文章介绍了在Java中对字符串进行填充的两种解决方法,并讨论了其中的一些问题和改进方法。

0
0 Comments

Java中如何填充字符串?

自从Java 1.5版本以来,我们可以使用String.format()来对给定的字符串进行左对齐或者右对齐填充。

public static String padRight(String s, int n) {
    return String.format("%-" + n + "s", s);  
}
public static String padLeft(String s, int n) {
    return String.format("%" + n + "s", s);  
}
public static void main(String args[]) throws Exception {
    System.out.println(padRight("Howto", 20) + "*");
    System.out.println(padLeft("Howto", 20) + "*");
}

输出结果如下:

Howto               *
               Howto*

但是如果我们需要使用其他字符(而不是空格)进行填充呢?使用String.format()是否仍然可以实现?我试过了,但是没能成功...

据我所知,String.format()无法做到这一点,但是编写代码来实现这个功能并不难,可以参考rgagnon.com/javadetails/java-0448.html(第二个例子)。

如果你提到rgagnon.com的话,要知道RealHowTo也是rgagnon.com的作者,所以他就是给自己的网站做宣传了...

至少在我的JVM上,"#"符号无法使用,而"-"符号是可以的(只需删除"#")。这可能与格式化器文档一致,我不知道;它说“'#' '\u0023' 要求输出使用替代形式。形式的定义由转换指定。”

在JRE6中,"%1$#"是可以的,但是在JRE7中,"%1$#"会抛出java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = #的异常。所以我通过删除"#"来更新了这个答案。

非常感谢你的精彩回答。但是我有一个疑问,1$是什么意思?刚才的回答中没有使用1$,看起来效果是一样的。这有什么区别吗?

哦,当然了,1$是用来显式指定String.format()中参数的顺序的,抱歉问了这么个愚蠢的问题。即使如此,在这种情况下,它几乎没有用处,我猜。

请注意,n必须大于0。

自从Java 11版本以后,我们可以使用String.repeat来实现字符串填充,可以参考Eko Setiawan的回答。

0