《每天一算法》17/1/13--求字符串最后一个单词的长度

问题:一串字符串,求其最后一个单词的长度

分析
思路一:因为单词之间是通过“ ”(空格)来划分的,所以可以使用正则表达式对“ ”进行分割,创建由各个单词组成的数组,然后取最后一个数组求其长度;
思路二:用“面对对象”的思路,获取字符串最后一个字符,然后从后往前进行字符判断,知道出现“ ”空格为止,并记录此时的长度;
注:因为字符串前提是正确的英文句子,所有不需要进行字母字符判断,但是英文句子存在标点符号,所以在计算最后一个单词长度时需要对标点进行过滤。
核心代码

/**
 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()就字符串进行“切割”处理,去掉了前后的空格,解决了因为空格造成获取最后一个单词错误的情况(如果字符串末尾有空格,就无法的获取最后一个单词的字符串,即返回长度为零,实际最后一个单词长度不为零)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值