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

2018-07-03  本文已影响0人  砾桫_Yvan

题目

编写一个函数将名称转换为首字母。这个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");
  }
  
}

思考

这次正则法又装逼成功。

上一篇下一篇

猜你喜欢

热点阅读