7. String 类的常用方法都有哪些?

Java中的String类提供了丰富的方法用于字符串操作。以下是一些常用的方法:

  1. 长度和判空
    • int length(): 返回字符串的长度。
    • boolean isEmpty(): 判断字符串是否为空。
  2. 获取字符
    • char charAt(int index): 获取指定索引处的字符。
  3. 比较
    • int compareTo(String anotherString): 按字典顺序比较两个字符串。
    • boolean equals(Object anObject): 比较两个字符串内容是否相等。
    • boolean equalsIgnoreCase(String anotherString): 忽略大小写比较两个字符串是否相等。
  4. 查找
    • int indexOf(int ch): 返回指定字符在字符串中首次出现的索引。
    • int lastIndexOf(int ch): 返回指定字符在字符串中最后一次出现的索引。
    • int indexOf(String str): 返回指定字符串在字符串中首次出现的索引。
    • int lastIndexOf(String str): 返回指定字符串在字符串中最后一次出现的索引。
  5. 截取和拆分
    • String substring(int beginIndex): 从指定索引截取到字符串末尾。
    • String substring(int beginIndex, int endIndex): 截取指定索引范围内的字符串。
    • String[] split(String regex): 根据正则表达式拆分字符串。
  6. 转换
    • char[] toCharArray(): 将字符串转换成字符数组。
    • String toLowerCase(): 将字符串转换为小写。
    • String toUpperCase(): 将字符串转换为大写。
    • String trim(): 去除字符串前后的空白。
  7. 替换
    • String replace(char oldChar, char newChar): 替换字符串中的字符。
    • String replaceAll(String regex, String replacement): 根据正则表达式替换字符串中的内容。
  8. 检查是否包含
    • boolean contains(CharSequence s): 检查字符串是否包含指定的字符序列。
    • boolean startsWith(String prefix): 检查字符串是否以指定前缀开始。
    • boolean endsWith(String suffix): 检查字符串是否以指定后缀结束。
  9. 拼接
    • String concat(String str): 将指定的字符串连接到当前字符串的末尾。
  10. 静态方法
  • String join(CharSequence delimiter, CharSequence... elements): 将多个字符串用指定的分隔符连接起来。

以下是部分方法的代码示例:

String str = "Hello, World!";
System.out.println(str.length()); // 输出 13
System.out.println(str.charAt(0)); // 输出 'H'
System.out.println(str.indexOf("World")); // 输出 7
System.out.println(str.substring(7)); // 输出 "World!"
System.out.println(str.replace('l', 'L')); // 输出 "HeLLo, WorLd!"

这些方法覆盖了字符串操作的大部分常见需求,是Java开发中经常使用的基础功能。

8. 抽象类必须要有抽象方法吗?

不一定。在Java中,抽象类并不强制要求必须包含抽象方法。抽象类可以包含0个、1个或者多个抽象方法,也可以不包含任何抽象方法,但包含抽象方法的类必须被声明为抽象类。

下面是一个不包含抽象方法的抽象类的例子:

public abstract class Animal {
    // 这里没有抽象方法
    public void eat() {
        System.out.println("This animal eats food.");
    }
    
    // 抽象类中可以有具体实现的方法
    public void sleep() {
        System.out.println("This animal sleeps.");
    }
}

在这个例子中,Animal类是一个抽象类,但它没有抽象方法。尽管如此,这样的设计也是合法的,它可能用于以下场景:

  1. 阻止实例化:你可能希望这个类不能被实例化,因为它代表的是一个概念或者是一个不完整的设计。
  2. 共享方法实现:通过在抽象类中实现某些方法,你可以为继承它的子类提供通用的功能。
  3. 预留扩展点:即使当前不包含抽象方法,未来也可以在不改变抽象类定义的情况下,向子类中添加抽象方法。

下面是一个继承上述抽象类的具体类示例:

public class Dog extends Animal {
    // Dog 类可以覆盖Animal中的方法,也可以添加新的方法或者属性
    @Override
    public void eat() {
        System.out.println("This dog eats dog food.");
    }
}

在这个例子中,尽管Animal类没有抽象方法,但Dog类仍然可以继承自Animal,并可以选择性地覆盖非抽象方法。

总结一下,抽象类并非必须包含抽象方法,抽象类的存在更多的是为了表达一种抽象层次或者为子类提供共有实现。

03-28 11:36