JAVA面试题总结-Java基础(10-14)

10.String 类的常用方法都有那些?

length():获取字符串的长度

charAt(int index):获取指定索引处的字符

indexOf(String str):获取str在字符串对象中第一次出现的索引

subString(int start):从start开始截取字符串

subString(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end

equals(Object obj):比较字符串的内容是否相同

equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写

startsWith(String prefix):判断字符串对象是否以指定的字符开头(区分大小写)

startsWith(String prefix,int toffset):判断字符串对象是否以指定的字符开头,参数toffset为指定从哪个下标开始

endsWith(String suffix):判断字符串对象是否以指定的字符结尾

isEmpty():判断指定字符串是否为空

toCharArray():把字符串转换为字符数组

toLowerCase():把字符串转换为小写字符串

toUpperCase():把字符串转换为大写字符串

trim():去除字符串两端空格

split(String regex):去除字符串中指定的的字符,然后返回一个新的字符串

subSequence(int beginIndex,int endIndex):截取字符串中指定位置的字符组成一个新的字符串

replace(char oldChar,char newChar):将指定字符替换成另一个指定的字符

replaceAll(String regex,String replasement):用新的内容替换全部旧内容

replaceFirst(String regex,String replacement):替换首个满足条件的内容

lastIndexOf(String str):返回指定字符出现的最后一次的下标

contains(charSquence s):查看字符串中是否含有指定字符

concat(String str):在原有的字符串的基础上加上指定字符串

//统一展示效果
public class StringTest {
    public static void main (String[] args) {
        String str = "abc周子琦";
        String str2 = "  aaBcD   ";
        
        //获取字符串的长度
        System.out.println(str.length());//6
        //获取指定索引处的字符
        System.out.println(str.charAt(3));//周
        //获取str在字符串对象中第一次出现的索引
        System.out.println(str.indexOf("b"));//1
        //从start开始截取字符串
        System.out.println(str.substring(3));//周子琦
        //从start开始,到end结束截取字符串。包括start,不包括end
        System.out.println(str.substring(1,4));//bc周
        //比较字符串的内容是否相同
        System.out.println(str.equals("abc周子琦"));//true
        System.out.println(str.equals("abc"));//false
        //比较字符串的内容是否相同,忽略大小写
        System.out.println(str.equalsIgnoreCase("ABC周子琦"));//true
        //判断字符串对象是否以指定的字符开头(区分大小写)
        System.out.println(str.startsWith("a"));//true
        System.out.println(str.startsWith("b"));//false
        //判断字符串对象是否以指定的字符开头,参数toffset为指定从哪个下标开始
        System.out.println(str.startsWith("b", 3));//false
        System.out.println(str.startsWith("b", 1));//true
        //判断字符串对象是否以指定的字符结尾
        System.out.println(str.endsWith("琦"));//true
        System.out.println(str.endsWith("子"));//false
        //判断指定字符串是否为空
        System.out.println(str.isEmpty());//false
        //把字符串转换为字符数组
        System.out.println(str.toCharArray());//abc周子琦
        //把字符串转换为小写字符串
        System.out.println(str2.toLowerCase());//  aabcd   
        //把字符串转换为大写字符串
        System.out.println(str2.toUpperCase());//  AABCD   
        //去除字符串两端空格
        System.out.println(str2.trim());//aaBcD
        //去除字符串中指定的的字符,然后返回一个新的字符串
        System.out.println(str.split("b"));//[Ljava.lang.String;@7852e922
        //直接输出是对象,需要遍历输出
        String array[]= str.split("b");
        for(int i = 0; i < array.length; i++) {
            System.out.print(array[i]);//ac周子琦
        }
        //截取字符串中指定位置的字符组成一个新的字符串
        System.out.println(str.subSequence(1, 4));//bc周
        //将指定字符替换成另一个指定的字符
        System.out.println(str.replace("abc", "123"));//123周子琦
        //用新的内容替换全部旧内容
        System.out.println(str2.replaceAll("a", "1"));//  11BcD   
        //替换首个满足条件的内容
        System.out.println(str2.replaceFirst("a", "1"));//  1aBcD  
        //返回指定字符出现的最后一次的下标
        System.out.println(str2.lastIndexOf("a"));//3
        //查看字符串中是否含有指定字符
        System.out.println(str2.contains("c"));//true
        System.out.println(str2.contains("d"));//false
        //在原有的字符串的基础上加上指定字符串
        System.out.println(str2.concat("周子琦"));//  aaBcD   周子琦
    }
}

注:在编写上面代码的时候发现subSequence和subString的结果一样,在好奇心的驱使下查到了:String.subSequence只是为了实现CharSequence接口上的同名方法而放在那里的,其行为与String.subString一样。

//subString底层代码
public String substring(int beginIndex) {
        if (beginIndex < 0) {
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        int subLen = value.length - beginIndex;
        if (subLen < 0) {
            throw new StringIndexOutOfBoundsException(subLen);
        }
        return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);
    }
public String substring(int beginIndex, int endIndex) {
        if (beginIndex < 0) {
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        if (endIndex > value.length) {
            throw new StringIndexOutOfBoundsException(endIndex);
        }
        int subLen = endIndex - beginIndex;
        if (subLen < 0) {
            throw new StringIndexOutOfBoundsException(subLen);
        }
        return ((beginIndex == 0) && (endIndex == value.length)) ? this
                : new String(value, beginIndex, subLen);
    }
//subSequence底层代码
public CharSequence subSequence(int beginIndex, int endIndex) {
        return this.substring(beginIndex, endIndex);
    }

区别:substring和subSequence的返回类型不一样,substring返回的是String,subSequence返回的是实现了CharSequence接口的类,也就是说使用subSequence得到的结果,只能使用CharSequence接口中的方法。不过在String类中已经重写了subSequence,调用subSequence方法,可以直接向下转型为String对象。

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

非必须

被abstract关键字修饰的类和方法为抽象类和抽象方法。

抽象类中可以没有抽象方法,但有抽象方法的类一定是抽象类。

抽象类不能被实例化,只有抽象类的非抽象子类才可以创建对象。

除非子类也是抽象类,否则非抽象子类必须重写抽象父类的抽象方法。

12.抽象类和普通类有哪些区别?

不同:

抽象类需要用abstract关键字修饰,而普通类不需要。

抽象类中可以有或没有抽象方法,而普通类一定没有抽象方法。

抽象类的非抽象子类必须重写抽象类中的抽象方法,而普通类可以选择重写父类方法或直接调用父类方法。

抽象类的存在是为了被继承,不能实例化,而普通类存在是为了实例化对象。

相同: 抽象类和普通类中都可以含有普通成员属性和普通成员方法。

抽象类和普通类都可以继承别的类或者被别的类继承。

抽象类和普通类的属性和方法都可以通过子类来调用。

13.抽象类能使用 final 修饰吗?

当然不能。

抽象类的职责就是用来被继承,但final修饰的类无法被继承,二者矛盾。

14.接口和抽象类有什么区别?

定义接口用interface关键字,定义抽象类用abstract关键字。

实现接口用implements关键字,继承抽象类用extends关键字。

接口是对行为的抽象,抽象类是对类的抽象。

接口可以多实现,而抽象类只能单继承。

接口没有构造方法,而抽象类有构造方法。

接口中只能定义常量,默认修饰符:public static final,而抽象类中可以定义变量或者常量。

当关注一个事物的本质的时候,用抽象类,当关注一个操作的时候,用接口。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值