1 实现trim方法
实现简单的trim方法,实现传入一个字符串,返回忽略前导空格和尾部空格。
public String myTrim(String str) {
if (str == null || str.isEmpty()) {//"".equals(str)
return null;
}
char[] chars = str.toCharArray();
int start = 0;
int end = str.length() - 1;
while (chars[start] == ' ' && start < end){//头标往右直到不为空格或者到倒数第二个,防止数组越界访问
start++;
}
while (chars[end] == ' ' && end > start) {//尾标向右直到不为空格或者正数第二个,防止数组越界
end--;
}
//System.out.println(start);
//System.out.println(end);
if (chars[start] == ' ') {//最后一次start++不一定是因为不是空格跳出while, 检验一下
return null;
}
return str.substring(start, end + 1);//[start, end + 1)
}
一道老生常谈的题目,看完标程才意识到我也犯了老生常谈的“错误”。
public String teacherTrim(String str) {
if(str == null || str.equals("")) {
return "";
}
int startIndex = 0;
int endIndex = str.length() - 1;
while (startIndex <= endIndex && (str.charAt(startIndex) == '-')) {
startIndex++;
}
while (startIndex <= endIndex && (str.charAt(endIndex) == '-')) {
endIndex--;
}
return str.substring(startIndex, endIndex + 1);
}
我为了解决数组越界的问题,又多进行了一次if判断。其实只需要把startIndex <= endIndex
和str.charAt(startIndex)
调换一下顺序,问题就得到解决。自己读代码思考其中奥秘。
2 大小写转换
实现把输入的字符串中所有大写英文字母全部转换为小写并输出到控制台。
public String myToLowerCase(String str) {
char[] chars = str.toCharArray();
/* for (char aChar : chars) {//aChar是临时变量,给它赋值并不会改变char数组中的值
System.out.println(aChar);
aChar = (aChar >= 'A' && aChar <= 'Z') ? (char)(aChar + 32) : aChar;
}*/
for (int i = 0; i < chars.length; i++) {
// chars[i] = (chars[i] >= 'A' && chars[i] <= 'Z') ? (char)(chars[i] + 32) : chars[i];
if (chars[i] >= 'A' && chars[i] <= 'Z') {
chars[i] = (char)(chars[i] + 32);
}
}
return new String(chars);
}
这个比较简单,但是忽然让我想起来一个问题:三目运算符和if-else到底哪个效率更高?
搜了一下说啥的都有
我选择相信GPT。
public class Main {
public static void main(String[] args) {
String input = "Hello World";
String result = convertToUpperToLower(input);
System.out.println("Result: " + result);
}
public static String convertToUpperToLower(String str) {
StringBuilder result = new StringBuilder();
for (char c : str.toCharArray()) {
// 如果是大写字母,则转换为小写字母,否则保持原样
result.append(Character.isUpperCase(c) ? Character.toLowerCase(c) : c);
}
return result.toString();
}
}
代码还是很优雅的,而且用到了刚学的StringBuilder
String str = "Hello World";
String lowercase = str.toLowerCase(); // 将字符串转换为小写形式
String uppercase = str.toUpperCase(); // 将字符串转换为大写形式
System.out.println("Original: " + str); // 原始字符串不受影响
System.out.println("Lowercase: " + lowercase); // 输出小写形式的字符串
System.out.println("Uppercase: " + uppercase); // 输出大写形式的字符串
这是Java中的 String 类提供的 toLowerCase() 和 toUpperCase() 方法来实现字符串的大小写转换。