问题:一串字符串,求其最后一个单词的长度
分析
思路一:因为单词之间是通过“ ”(空格)来划分的,所以可以使用正则表达式对“ ”进行分割,创建由各个单词组成的数组,然后取最后一个数组求其长度;
思路二:用“面对对象”的思路,获取字符串最后一个字符,然后从后往前进行字符判断,知道出现“ ”空格为止,并记录此时的长度;
注:因为字符串前提是正确的英文句子,所有不需要进行字母字符判断,但是英文句子存在标点符号,所以在计算最后一个单词长度时需要对标点进行过滤。
核心代码
/**
3. 方法一:
4. 具体实现:
5. ①通过正则表达式获取以“ ”空格为分割的字符串数组
6. ②获取最后一个数组,然后求其长度
7. @param string
8. @return
*/
public static int getLastOfWordMethod1(String string){
string = string.trim ();//除去前后的空格
String temp[] = string.split ( " " );
//标点符号过滤
String str = temp[temp.length - 1];
int cnt = 0;
for(int i =0 ; i < str.length () ;i++){
if(isChar ( str.charAt (str.length ()- 1 - i) )){
return str.length () - cnt;
}else{
cnt ++;
}
}
return 0;
}
/**
9. 方法二:
10. 具体实现:
11. ①获取最后一个字符,判断是否单词
12. ②指针往前遍历,并用一个变量length进行计数
13. ③出现“ ”后,停止遍历并输出length
14. 15. @param string
*/
public static int getLastOfWordMethod2 ( String string ) {
int length = 0;
string = string.trim ();//除去前后的空格
for ( int i = 0 ; i < string.length ( ) ; i++ ) {
char c = string.charAt ( string.length ( ) -1- i );
if ( isChar ( c ) ) {
length += 1;
} else if ( c == ' ' ) {
return length;
}
}
return 0;
}
/**
15. 将判断是否为字母封装到一个方法中
16. 判断字符是否为字母
17. @param c
18. @return
*/
public static boolean isChar(char c){
if((c>= 'A' && c <= 'Z' )|| (c >= 'a' && c <= 'z') ){
return true;
}
return false;
}
测试代码
public static void main ( String[] args ) {
String string = "Hello WorldWorldWorld!!! ";
System.out.println ("字符串:"+string+'\n' +
"最后一个单词的长度为(方法一):"+getLastOfWordMethod1 ( string ) +
"\n最后一个单词的长度为(方法二):"+getLastOfWordMethod2 ( string ) );
}
输出结果
字符串:Hello WorldWorldWorld!!!
最后一个单词的长度为(方法一):15
最后一个单词的长度为(方法二):15
总结
字符串的前提是正确的英文句子,处理过程中使用了string.trim()就字符串进行“切割”处理,去掉了前后的空格,解决了因为空格造成获取最后一个单词错误的情况(如果字符串末尾有空格,就无法的获取最后一个单词的字符串,即返回长度为零,实际最后一个单词长度不为零)