题目
编写一个函数将名称转换为首字母。这个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");
}
}
思考
这次正则法又装逼成功。
网友评论