在“ 檢查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