题目
威尔史密斯的儿子贾登史密斯是电影明星,如The Karate Kid(2010)和After Earth(2013)。Jaden也因他通过Twitter提供的一些哲学而闻名。在Twitter上撰写文章时,他几乎总是把每一个词都用在大写字母上。
任务是将字符串转换为Jaden Smith的写法。这些字符串是来自Jaden Smith的,但它们没有按照他原先输入的方式进行大写。
例:
Not Jaden-Cased: "How can mirrors be real if our eyes aren't real"
Jaden-Cased: "How Can Mirrors Be Real If Our Eyes Aren't Real"
请注意,Java版本期望空字符串的返回值为null或null。
测试用例:
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.junit.Test;
public class JadenCaseTest {
JadenCase jadenCase = new JadenCase();
@Test
public void jadenCaseClassExists() {
assertNotNull("JadenCase class doesn't exist!", jadenCase);
}
@Test
public void test() {
assertEquals("toJadenCase doesn't return a valide JadenCase String! try again please :)", jadenCase.toJadenCase("most trees are blue"), "Most Trees Are Blue");
}
@Test
public void testNullArg() {
assertNull("Must return null when the arg is null", jadenCase.toJadenCase(null));
}
@Test
public void testEmptyArg() {
assertNull("Must return null when the arg is null", jadenCase.toJadenCase(""));
}
}
解答
我的:
- 首先,根据空格分割为数组
- 然后,转换每个元素的首字母为大写
- 最后,拼接为原来含空格的话
public class JadenCase {
public String toJadenCase(String phrase) {
if (phrase != null && !phrase.isEmpty()) {
String[] arr = phrase.split(" ");
String result = null;
String tmp = "";
for (String anArr : arr) {
String str = anArr.replaceFirst(anArr.substring(0, 1), anArr.substring(0, 1).toUpperCase());
tmp += (str + " ");
result = tmp.substring(0, tmp.length() - 1);
}
return result;
}
return null;
}
}
别人的:
- 首先,原字符串转字符型数组
- 然后,转换首元素字符和空格后一个元素字符为大写字符
- 最后,字符型数组转String
import java.lang.Character;
public class JadenCase {
public String toJadenCase(String phrase) {
if(phrase == null || phrase.equals("")) return null;
char[] array = phrase.toCharArray();
for(int x = 0; x < array.length; x++) {
if(x == 0 || array[x-1] == ' ') {
array[x] = Character.toUpperCase(array[x]);
}
}
return new String(array);
}
}
思考
我的方法有点硬呀,继续多多练习。