妙用Commons良药<二>
谈谈怎么用org.apache.commons.lang.StringUtils这一个类,讲一下具体的几个常用的方法
使用StringUtils.isBlank(),该方法在收到空字符串,零长度字符串或全为空格的字符串时将返回true.它能通过返回true的方式优雅地处理null.
String test = "";
String test2 = "\n\n\t";
String test3 = null;
String test4 = "Test";
System.out.println( "test blank? " + StringUtils.isBlank( test ) );
System.out.println( "test2 blank? " + StringUtils.isBlank( test2 ) );
System.out.println( "test3 blank? " + StringUtils.isBlank( test3 ) );
System.out.println( "test4 blank? " + StringUtils.isBlank( test4 ) );
前面三个返回true,返回一个返回false
同样,有一个StringUtils.isNotBlank()方法,当一个字符串里面为空,或只包含空格,或是null时,该方法将返回false,该方法的作用相当于:
if( variable != null && variable.length( ) > 0 && !variable.trim( ).equals("") ) {
// Do something
}
接下来,介绍一个非常有用的方法StringUtils.abbreviate(),该方法接受一个字符串,如果可以的话就缩减它,如果要把一个字符串缩减为20个字符长,而原字符串长度小于20个字符长,则该方法将返回原文本.若原字符串长度大于20个字符,则显示17个字符和3个省略号.
String test = "This is a test of the abbreviation."
String test2 = "Test"
System.out.println( StringUtils.abbreviate( test, 10 ) );
System.out.println( StringUtils.abbreviate( test2, 10 ) );
结果如下:
This is...
Test
另外一点,可以使用StringUtils.split(),并提供一系列字符作为分隔符,StringUtils.chomp()去除字符串的末行终止序列.
接下来,看一下StringUtils.substringBetween()方法,看下面一个例子:
String variables = "{45}, {35}, {120}" ;
List numbers = new ArrayList( );
String variablesTemp = variables;
while( StringUtils.substringBetween( variablesTemp, "{", "}" ) != null ) {
String numberStr = StringUtils.substringBetween( variables, "{", "}" );
Double number = new Double( numberStr );
numbers.add( number );
variablesTemp = variablesTemp.substring( variablesTemp.indexOf(",") );
}
double sum = StatUtil.sum( ArrayUtils.toPrimitive( numbers.toArray( ) ) );
System.out.println( "Variables: " + variables + ", Sum: " + sum );
其结果如下:
Variable: {45}, {35}, {120}, Sum: 200
如果字符串的首尾含有需要清除的字符,可使用StringUtils.strip()清除它们.看下面例子:
String original = "-------***---SHAZAM!---***-------";
String stripped = StringUtils.strip( original, "-*" );
System.out.println( "Stripped: " + stripped )
结果如下:
Stripped: SHAZAM!
增加一点,StringUtils.reverse()可以实现字符串的反转,StringUtils.reverseDelimited()能够分隔符反向排列字符串中的标记.举例:
public Sentence reverseSentence(String sentence) {
String reversed = StringUtils.chomp( sentence, "." );
reversed = StringUtils.reverseDelimited( reversed, ' ' );
reversed = reversed + ".";
return reversed;
}
String sentence = "I am Susan."
String reversed = reverseSentence( sentence ) );
System.out.println( sentence );
System.out.println( reversed );
结果如下:
I am Susan.
Susan am I.:
当然,还可以检测字符串内容,isNumeric( ),isAlpha(),isAlphanumeric(),and isAlphaSpace()这几个方法用来验证用户输入的正确性,验证字符串的内容是否为数字,是否字符,是否为数字+字符,是否为字符+空格.
如果你需要检查一个大文件里面一个字符串出现的次数,可以为StringUtils.countMatches()这一个方法,下面举一个比较好的例子,不能将整个文件放入内存中,相对比较合理的做法是一次一行地统计,其方法如下:
public int testNumber() throws Exception{
File manuscriptFile = new File("c:\\test.txt");
Reader reader = new FileReader(manuscriptFile);
LineNumberReader lineReader = new LineNumberReader(reader);
int number = 0;
while(lineReader.ready()){
String line = StringUtils.lowerCase(lineReader.readLine());
number += StringUtils.countMatches(line, "test");
}
return number;
}