Java第十二天

60.字符串面试

(1)概述    String  str = “abc”;字符串是类,是引用的数据类型    数组

(2)字符串的常量spa

String  str = “abc”;3d

这是定义了一个字符串的常量。常量是不可改变的量,字符串是不能改变的。指针

public class StringTest {
    public static void main(String[] args) {
        String str="moni";
        //这里不是作加等,在字符串上作拼接实际是新产生字符串
        str+="ca";
        System.out.println(str);
    }
}

特色:对象

字符串常量是共享的(在数据共享区中有一个字符串常量池)blog

字符串不能变化,若是咱们在字符串上作拼接,实际上是新产生一个字符串。索引

(3)字符串的构造器ci

字符串常量是一种定义的方式字符串

字符串须要有其余形式的构造器,好比能够经过字符的数组,字节数组,io流中的数据等等 。

public class StringTest1 {
    public static void main(String[] args) {
// 第一种方式
        String s=new String();
        System.out.println(s);

        String s1="";
//第二种方式经过字节数组来建立字符串
        byte[] b=new byte[]{88,89,90,100,98,99};
        String bs=new String(b);
        System.out.println(bs);
//第三种方式经过字符节数组来建立字符串,offset是索引的位置,length表示引用的长度
        String bs2=new String(b,1,4);
        System.out.println(bs2);
//第四种经过字节数组来建立字符串
        char[] c={'m','o','n','i','c','a'};
        String cs=new String(c);
        System.out.println(cs);
//第五种经过字节数组来建立字符串offset是索引的位置,count表示引用的长度
        String cs2=new String(c,2,4);
        System.out.println(cs2);
//第六种经过字符串常量建立字符串
        String ss=new String("original");
        System.out.println(ss);
    }
}

(4)面试题

String s1 = new String (“abc”);

String s2 = “abc”;

有什么区别?

new String (“abc”);若是没有在字符串的常量池中没有abc就会在堆中建立一个对象,同时又在字符串常量池中也建立一个对象,而后用堆中的对象来引用字符串常量池中对象。实则建立了2个对象。

new String (“abc”); 若是在字符串的常量池中有abc,那么就会在堆中建立一个对象,直接引用已经存在的字符串常量池中的那个对象。

String s2 = “abc”;是直接在字符串的常量池种建立一个abc

(5)空字符串和null的区别

空字符串是有效的引用,有地址的,只不过是内容的长度是0

null这个引用是空引用,不能使用。使用必定会报空指针的错误。引用数据类型的默认值是null。

(6)字符串的判断方法

public static void main(String[] args) {
        String s="i love you!";
//    boolean endsWith(String suffix)判断一个字符串是否以某一个字符串为后缀
        boolean b1=s.endsWith("!");
        System.out.println(b1);

        String s1="I Love You!";
//    boolean equals(Object anObject) 判断两个字符串的值是否相等
        boolean b2=s.equals(s1);
        System.out.println(b2);
//    boolean equalsIgnoreCase(String anotherString) 判断两个字符串忽略大小写后是否相等
        boolean b3=s.equalsIgnoreCase(s1);
        System.out.println(b3);
//    boolean contains(CharSequence s) 判断一个字符串是否包含一个子字符串
        boolean b4=s.contains("love");
        System.out.println(b4);
//    boolean startsWith(String prefix) 判断一个字符串是否以某一个字符串为开头
        boolean b5=s.startsWith("i");
        System.out.println(b5);
//    boolean isEmpty() 判断一个字符串是不是空串
        boolean b6="".isEmpty();
        System.out.println(b6);
//判断一个字符串是不是空串, 最好把空串的常量放在前面,防止空指针异常
        boolean b7="".equals(s);
        System.out.println(b7);

    }

(7)字符串的获取功能

public static void main(String[] args) {
        String s="i love you!";
//    int length() 得到字符串的长度,区别于数组的长度是属性
        int length=s.length();
        System.out.println(length);
//     char charAt(int index)  根据索引号得到字符
        char ca=s.charAt(5);
        System.out.println(ca);
//     int indexOf(int ch)  根据指定字符(ascii码对应字符)得到该字符在字符串中首次出现的位置
        int idi=s.indexOf(101);
        System.out.println(idi);
//    int indexOf(String str)  根据指定字符串得到在母字符串中第一次出现的索引
        int ids=s.indexOf("ve");
        System.out.println(ids);
    }

/*练习:计算一个字符串中大写字母和小写字母还有数字的数量
23aosdf23aosdfSDFGsfdgloasasdfasfgsrgqADF2453sadfgag*/
public class StringTest4 {
    public static void main(String[] args) {
        int num=0;
        int upper=0;
        int downer=0;
        String s="23aosdf23aosdfSDFGsfdgloasasdfasfgsrgqADF2453sadfgag";
        for (int i = 0; i < s.length(); i++) {
            int asc=s.charAt(i);
            if(asc>47&&asc<58){
                num++;
            }
            if(asc>64&&asc<91){
                upper++;
            }
            if(asc>96&&asc<123){
                downer++;
            }
        }
        System.out.println("字符串中大写字母数量是:"+upper);
        System.out.println("字符串中小写字母数量是:"+downer);
        System.out.println("字符串中数字数量是:"+num);
    }
}

相关文章
相关标签/搜索