美文网首页
每日一练39——Java缩写双英文单词(8kyu)

每日一练39——Java缩写双英文单词(8kyu)

作者: 砾桫_Yvan | 来源:发表于2018-07-03 09:55 被阅读0次

    题目

    编写一个函数将名称转换为首字母。这个kata严格地用两个词,它们之间有一个空格。

    输出应该是两个大写字母,并用点分隔它们。

    它应该是这样的:

    Sam Harris => S.H

    Patrick feeney => P.F

    测试用例:

    import org.junit.Test;
    import static org.junit.Assert.assertEquals;
    import org.junit.runners.JUnit4;
    
    public class SolutionTest {
    
        @Test
        public void testFixed() {
            assertEquals(AbbreviateTwoWords.abbrevName("Sam Harris"), "S.H");
            assertEquals(AbbreviateTwoWords.abbrevName("Patrick feenan"), "P.F");
            assertEquals(AbbreviateTwoWords.abbrevName("evan Cole"), "E.C");
            assertEquals(AbbreviateTwoWords.abbrevName("P Favuzzi"), "P.F");
            assertEquals(AbbreviateTwoWords.abbrevName("David Mendieta"), "D.M");
        }
    }
    

    解题

    我的:

    public class AbbreviateTwoWords {
    
        public static String abbrevName(String name) {
            char[] arrs = name.toCharArray();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < arrs.length; i++) {
                if (i == 0) { // 取首字母
                    sb.append(arrs[i]);
                } else if (arrs[i] == 32) {
                    sb.append(".").append(arrs[i+1]); // 加点取第二个首字母
                    i++;
                }
            }
            return new String(sb).toUpperCase();
        }
    }
    

    还想到一个简单点的思路,先用空格spilt(" ")来分割,再取每个首字母并大写.substring(0, 1).toUpperCase()。

    别人的:正则法

    public class AbbreviateTwoWords {
    
      public static String abbrevName(String name) {
        return name.toUpperCase().replaceAll("(.).*\\s(.).*", "$1.$2");
      }
      
    }
    

    思考

    这次正则法又装逼成功。

    相关文章

      网友评论

          本文标题:每日一练39——Java缩写双英文单词(8kyu)

          本文链接:https://www.haomeiwen.com/subject/lhqduftx.html