在“ 检查Java中的空,空或仅空白字符串”一文中 ,我演示了Java生态系统(标准Java, Guava , Apache Commons Lang和Groovy )中用于检查字符串是否为空,空或空白的常见方法。仅类似于C#通过String.IsNullOrWhiteSpace方法支持的内容。 我展示的方法之一是基于Guava的方法,该方法利用了Guava类的Strings及其静态isNullOrEmpty(String)方法。 在本文中,我将介绍捆绑在Strings
类中的Guava的六个“与String有关的静态实用程序方法”所提供的其他有用的功能,以使用String。
使用Guava的Strings类非常简单,因为它的命名方法很好。 以下列表枚举了Strings类上的方法(所有静态方法),并在方法名称旁边简要说明了每个方法的作用(这些描述是从Javadoc文档中借用或改编而成的)。
- Strings.isNullOrEmpty(String)
- “如果给定的字符串为null或为空字符串,则返回true。”
- emptyToNull(String)
- '如果给定的字符串非空,则返回它;
- nullToEmpty(String)
- '如果给定的字符串非空,则返回它;
- padStart(String,int,char)
- 在提供的String 前面添加,如有必要,提供足够的char字符以使字符串达到指定的长度。
- padEnd(String,int,char)
- 附加到提供的String上(如果需要),提供足够的char字符使字符串达到指定的长度。
- 重复(String,int)
- “返回由输入字符串的特定数量的串联副本组成的字符串。”
isNullOrEmpty
番石榴的Strings.isEmptyOrNull(字符串)方法可以方便地构建简单和高度可读的条件语句检查String
作用在说之前空或空String
。 如前所述,我之前已经简要介绍了此方法 。 接下来显示此方法的另一个代码演示。
使用Strings.isNullOrEmpty(String)的代码示例
/*** Print to standard output a string message indicating whether the provided* String is null or empty or not null or empty. This method uses Guava's* Strings.isNullOrEmpty(String) method.* * @param string String to be tested for null or empty.*/private static void printStringStatusNullOrEmpty(final String string){out.println( 'String '' + string + '' '+ (Strings.isNullOrEmpty(string) ? 'IS' : 'is NOT')+ ' null or empty.');}/*** Demonstrate Guava Strings.isNullOrEmpty(String) method on some example* Strings.*/public static void demoIsNullOrEmpty(){printHeader('Strings.isNullOrEmpty(String)');printStringStatusNullOrEmpty('Dustin');printStringStatusNullOrEmpty(null);printStringStatusNullOrEmpty('');}
运行以上代码的输出包含在下一个屏幕快照中。 它显示了将null或空String(“)传递给Strings.isNullOrEmpty(String)
时返回true。
nullToEmpty和emptyToNull
很多时候,您可能希望将空字符串视为空字符串,或者在存在空字符串时希望呈现空值。 在此类情况下,当需要在null和空String之间进行转换时,以下代码段演示了Strings.nullToEmpty(String)和Strings.emptyToNull(String)的使用 。
nullToEmpty和emptyToNull
/*** Print to standard output a simple message indicating the provided original* String and the provided result/output String.* * @param originalString Original String.* @param resultString Output or result String created by operation.* @param operation The operation that acted upon the originalString to create* the resultString.*/private static void printOriginalAndResultStrings(final String originalString, final String resultString, final String operation){out.println('Passing '' + originalString + '' to ' + operation + ' produces '' + resultString + ''');}/** Demonstrate Guava Strings.emptyToNull() method on example Strings. */public static void demoEmptyToNull(){final String operation = 'Strings.emptyToNull(String)';printHeader(operation);printOriginalAndResultStrings('Dustin', Strings.emptyToNull('Dustin'), operation);printOriginalAndResultStrings(null, Strings.emptyToNull(null), operation);printOriginalAndResultStrings('', Strings.emptyToNull(''), operation);}/** Demonstrate Guava Strings.nullToEmpty() method on example Strings. */public static void demoNullToEmpty(){final String operation = 'Strings.nullToEmpty(String)';printHeader(operation);printOriginalAndResultStrings('Dustin', Strings.nullToEmpty('Dustin'), operation);printOriginalAndResultStrings(null, Strings.nullToEmpty(null), operation);printOriginalAndResultStrings('', Strings.nullToEmpty(''), operation);}
运行以上代码的输出(显示在下一个屏幕快照中)证明了这些方法可以按预期工作:将null转换为空String或将空String转换为null。
padStart和padEnd
使用Java(或任何其他语言)处理String时,另一种常见做法是使用指定字符将String填充到特定长度。 Guava通过其Strings.padStart(String,int,char)和Strings.padEnd(String,int,char)方法轻松支持此功能,如以下代码清单所示。
padStart和padEnd
/*** Demonstrate Guava Strings.padStart(String,int,char) method on example* Strings.*/public static void demoPadStart(){final String operation = 'Strings.padStart(String,int,char)';printHeader(operation);printOriginalAndResultStrings('Dustin', Strings.padStart('Dustin', 10, '_'), operation);/** * Do NOT call Strings.padStart(String,int,char) on a null String:* Exception in thread 'main' java.lang.NullPointerException* at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:187)* at com.google.common.base.Strings.padStart(Strings.java:97)*///printOriginalAndResultStrings(null, Strings.padStart(null, 10, '_'), operation);printOriginalAndResultStrings('', Strings.padStart('', 10, '_'), operation); }/*** Demonstrate Guava Strings.padEnd(String,int,char) method on example* Strings.*/public static void demoPadEnd(){final String operation = 'Strings.padEnd(String,int,char)';printHeader(operation);printOriginalAndResultStrings('Dustin', Strings.padEnd('Dustin', 10, '_'), operation);/*** Do NOT call Strings.padEnd(String,int,char) on a null String:* Exception in thread 'main' java.lang.NullPointerException* at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:187)* at com.google.common.base.Strings.padEnd(Strings.java:129)*///printOriginalAndResultStrings(null, Strings.padEnd(null, 10, '_'), operation);printOriginalAndResultStrings('', Strings.padEnd('', 10, '_'), operation); }
执行时,以上代码根据所调用的方法在提供的String之前或之后用下划线字符填充提供的String。 在这两种情况下,字符串的长度都指定为十。 此输出显示在下一个屏幕快照中。
重复
Guava的Strings
类支持的最后一种处理技术是能够轻松地将给定String重复指定次数的功能。 下一个代码清单和带有该代码输出的相应屏幕快照中对此进行了演示。 在此示例中,提供的String重复了三次。
重复
/** Demonstrate Guava Strings.repeat(String,int) method on example Strings. */public static void demoRepeat(){final String operation = 'Strings.repeat(String,int)';printHeader(operation);printOriginalAndResultStrings('Dustin', Strings.repeat('Dustin', 3), operation);/*** Do NOT call Strings.repeat(String,int) on a null String:* Exception in thread 'main' java.lang.NullPointerException* at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:187)* at com.google.common.base.Strings.repeat(Strings.java:153)*///printOriginalAndResultStrings(null, Strings.repeat(null, 3), operation);printOriginalAndResultStrings('', Strings.repeat('', 3), operation);}
包起来
上面的示例很简单,因为Guava的Strings
类易于使用。 现在列出了包含前面显示的演示代码的完整类。
GuavaStrings.java
package dustin.examples;import com.google.common.base.Strings;
import static java.lang.System.out;/*** Simple demonstration of Guava's Strings class.* * @author Dustin*/
public class GuavaStrings
{/*** Print to standard output a string message indicating whether the provided* String is null or empty or not null or empty. This method uses Guava's* Strings.isNullOrEmpty(String) method.* * @param string String to be tested for null or empty.*/private static void printStringStatusNullOrEmpty(final String string){out.println( 'String '' + string + '' '+ (Strings.isNullOrEmpty(string) ? 'IS' : 'is NOT')+ ' null or empty.');}/*** Demonstrate Guava Strings.isNullOrEmpty(String) method on some example* Strings.*/public static void demoIsNullOrEmpty(){printHeader('Strings.isNullOrEmpty(String)');printStringStatusNullOrEmpty('Dustin');printStringStatusNullOrEmpty(null);printStringStatusNullOrEmpty('');}/*** Print to standard output a simple message indicating the provided original* String and the provided result/output String.* * @param originalString Original String.* @param resultString Output or result String created by operation.* @param operation The operation that acted upon the originalString to create* the resultString.*/private static void printOriginalAndResultStrings(final String originalString, final String resultString, final String operation){out.println('Passing '' + originalString + '' to ' + operation + ' produces '' + resultString + ''');}/** Demonstrate Guava Strings.emptyToNull() method on example Strings. */public static void demoEmptyToNull(){final String operation = 'Strings.emptyToNull(String)';printHeader(operation);printOriginalAndResultStrings('Dustin', Strings.emptyToNull('Dustin'), operation);printOriginalAndResultStrings(null, Strings.emptyToNull(null), operation);printOriginalAndResultStrings('', Strings.emptyToNull(''), operation);}/** Demonstrate Guava Strings.nullToEmpty() method on example Strings. */public static void demoNullToEmpty(){final String operation = 'Strings.nullToEmpty(String)';printHeader(operation);printOriginalAndResultStrings('Dustin', Strings.nullToEmpty('Dustin'), operation);printOriginalAndResultStrings(null, Strings.nullToEmpty(null), operation);printOriginalAndResultStrings('', Strings.nullToEmpty(''), operation);}/*** Demonstrate Guava Strings.padStart(String,int,char) method on example* Strings.*/public static void demoPadStart(){final String operation = 'Strings.padStart(String,int,char)';printHeader(operation);printOriginalAndResultStrings('Dustin', Strings.padStart('Dustin', 10, '_'), operation);/** * Do NOT call Strings.padStart(String,int,char) on a null String:* Exception in thread 'main' java.lang.NullPointerException* at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:187)* at com.google.common.base.Strings.padStart(Strings.java:97)*///printOriginalAndResultStrings(null, Strings.padStart(null, 10, '_'), operation);printOriginalAndResultStrings('', Strings.padStart('', 10, '_'), operation); }/*** Demonstrate Guava Strings.padEnd(String,int,char) method on example* Strings.*/public static void demoPadEnd(){final String operation = 'Strings.padEnd(String,int,char)';printHeader(operation);printOriginalAndResultStrings('Dustin', Strings.padEnd('Dustin', 10, '_'), operation);/*** Do NOT call Strings.padEnd(String,int,char) on a null String:* Exception in thread 'main' java.lang.NullPointerException* at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:187)* at com.google.common.base.Strings.padEnd(Strings.java:129)*///printOriginalAndResultStrings(null, Strings.padEnd(null, 10, '_'), operation);printOriginalAndResultStrings('', Strings.padEnd('', 10, '_'), operation); }/** Demonstrate Guava Strings.repeat(String,int) method on example Strings. */public static void demoRepeat(){final String operation = 'Strings.repeat(String,int)';printHeader(operation);printOriginalAndResultStrings('Dustin', Strings.repeat('Dustin', 3), operation);/*** Do NOT call Strings.repeat(String,int) on a null String:* Exception in thread 'main' java.lang.NullPointerException* at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:187)* at com.google.common.base.Strings.repeat(Strings.java:153)*///printOriginalAndResultStrings(null, Strings.repeat(null, 3), operation);printOriginalAndResultStrings('', Strings.repeat('', 3), operation);}/*** Print a separation header to standard output.* * @param headerText Text to be placed in separation header.*/public static void printHeader(final String headerText){out.println('\n=========================================================');out.println('= ' + headerText);out.println('=========================================================');}/*** Main function for demonstrating Guava's Strings class.* * @param arguments Command-line arguments: none anticipated.*/public static void main(final String[] arguments){demoIsNullOrEmpty();demoEmptyToNull();demoNullToEmpty();demoPadStart();demoPadEnd();demoRepeat();}
}
填充和重复字符串的方法并不善于传递给它们的空字符串。 实际上,向这三个方法传递null都会引发NullPointerException 。 有趣的是,这些是Guava在其自己的代码中使用Preconditions类的更多示例。
结论
许多Java库和框架都提供String操作功能,这些功能的名称类似于StringUtil
。 Guava的Strings
类就是这样的一个例子,它提供的方法可以使Java对String的操作更加轻松和简洁。 确实,当我使用Guava的Strings方法时,我感觉几乎就像在使用Groovy的GDK String优点 。
参考:来自JCG合作伙伴 Dustin Marx的Guava的Strings类,来自Inspired by Actual Events博客。
翻译自: https://www.javacodegeeks.com/2012/11/guavas-strings-class.html