题目
定义toAlternatingCase 方法,使每个小写字母变为大写字母,每个大写字母变为小写字母。例如:
StringUtils.toAlternativeString("hello world") == "HELLO WORLD"
StringUtils.toAlternativeString("HELLO WORLD") == "hello world"
StringUtils.toAlternativeString("hello WORLD") == "HELLO world"
StringUtils.toAlternativeString("HeLLo WoRLD") == "hEllO wOrld"
StringUtils.toAlternativeString("12345") == "12345" // Non-alphabetical characters are unaffected
StringUtils.toAlternativeString("1a2b3c4d5e") == "1A2B3C4D5E"
StringUtils.toAlternativeString("StringUtils.toAlternatingCase") == "sTRINGuTILS.TOaLTERNATINGcASE"
像往常一样,你的方法不会使原始字符串产生变异。
测试用例:
import org.junit.Test;
import static org.junit.Assert.*;
public class StringUtilsTest {
@Test
public void fixedTests() {
assertEquals("HELLO WORLD", StringUtils.toAlternativeString("hello world"));
assertEquals("hello world", StringUtils.toAlternativeString("HELLO WORLD"));
assertEquals("HELLO world", StringUtils.toAlternativeString("hello WORLD"));
assertEquals("hEllO wOrld", StringUtils.toAlternativeString("HeLLo WoRLD"));
assertEquals("Hello World", StringUtils.toAlternativeString(StringUtils.toAlternativeString("Hello World")));
assertEquals("12345", StringUtils.toAlternativeString("12345"));
assertEquals("1A2B3C4D5E", StringUtils.toAlternativeString("1a2b3c4d5e"));
assertEquals("sTRINGuTILS.TOaLTERNATINGcASE", StringUtils.toAlternativeString("StringUtils.toAlternatingCase"));
}
@Test
public void kataTitleTests() {
assertEquals("ALTerNAtiNG CaSe", StringUtils.toAlternativeString("altERnaTIng cAsE"));
assertEquals("altERnaTIng cAsE", StringUtils.toAlternativeString("ALTerNAtiNG CaSe"));
assertEquals("ALTerNAtiNG CaSe <=> altERnaTIng cAsE", StringUtils.toAlternativeString("altERnaTIng cAsE <=> ALTerNAtiNG CaSe"));
assertEquals("altERnaTIng cAsE <=> ALTerNAtiNG CaSe", StringUtils.toAlternativeString("ALTerNAtiNG CaSe <=> altERnaTIng cAsE"));
}
}
解题
我的笨方法:
public class StringUtils {
public static String toAlternativeString(String string) {
char[] arr = string.toCharArray();
for (int i =0;i<arr.length;i++) {
if (arr[i] <= 90 && arr[i] >= 65) {
arr[i] += 32;
} else if (arr[i] <= 122 && arr[i] >= 97) {
arr[i] -= 32;
}
}
return new String(arr);
}
}
别人的:
public class StringUtils {
public static String toAlternativeString(String string) {
String result = "";
for (char c : string.toCharArray()) {
if(Character.isUpperCase(c)) {
result += Character.toLowerCase(c);
} else {
result += Character.toUpperCase(c);
}
}
return result;
}
}
思考
看了别人的代码,(⊙o⊙)…官方库函数/方法积累不够,char封装类还有这么好的方法isUpperCase()。