String类常用功能

    Java没有内置的字符串类型,所以,就在Java类库中提供了一个类String 供我们来使用,这个String类代表的就是字符串,
    Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。 

    字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如: 
 String str = "abc";//这里是String类的一种特殊用法,它等价于str=new String("abc"),但在内存中的结构又有所不同,在下面会有详细解释。

String 的构造方法:
A:public String():空构造
B:public String(byte[] bytes):把字节数组转换成字符串
C:public String(byte[] bytes,int offset,int length):把字节数组中从指定位置开始截取指定长度的字节转换成字符串
D:public String(char[] value):把字符数组转换成字符串
E:public String(char[] value,int offset,int count):把字符数组中从指定位置开始截取指定长度的字符转换成字符串
F:public String(String original):把字符串常量值转换成字符串
G:public String(StringBuffer buffer):把StringBuffer类型的字符串转成String类型
H: public String(StringBuilder builder) :把StringBuilder类型的字符串转换成String类型
下面的这一个虽然不是构造方法,但是结果也是一个字符串对象
I:String s = “hello”;

String的特点:一旦被赋值就不能改变
看如下代码

            String s="hello";//创建一个字符串
            s+="world";//把字符串s拼接另一个"world"字符串
            System.out.println("s="+s);//打印结果为s=helloworld

上面代码的打印结果跟String类的特点完全不符合,按照String类的特点来说,打印s+=”world”应该报错的。不过,这里并没有错,当我们使用String s1=”hello”时,虚拟机会在方法区开辟一块字符串常量池,然后看常量池中有没有hello,如果没有,就把hello放进去,再把地址值给s1,所以使用s1=”hello” 和s2 = new String(“hello”)创建的字符串是不同的,s2=new String(“hello”)是先在堆内存中开辟空间,然后在字符串常量池中存放hello,把hello的地址值放到了堆内存中,再把堆内存地址给了s2。总结来说,s1只在字符串常量池创建了一个对象,而s2分别在堆和字符串常量池各创建了一个对象。说完了声明的不能,下面说依一下s+=“world”,程序执行到这一句时,先是查看字符串常量池中是否有world,没有就把world放进去,此时,world仅仅是放进去了,没有任何引用指向world,此时,s指向的依然是hello。world存放完毕后,开始执行+=操作,这一步是在字符串常量池中重新开辟第三块空间,把hello和world分别放进去,放进去是是hello和world本身,不是地址值,然后把第三块空间的地址值重新给了s。此时,第一块空间hello和第二块空间world的内容没有改变,但也没有任何引用指向它们。
下面验证一下:

s3="hello";
s4="hello";
System.out.println(s3==s4);//打印结果为true

因为s3和s4指向的是同一块内存,所以比较地址值是true.

String类中的判断功能:

boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
boolean contains(String str):判断大字符中是否包含小字符串
boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
boolean isEmpty():判断字符串是否为空

字符串的获取功能:

char charAt(int index):获取指定索引处的字符
int indexOf(int ch):返回指定字符在此字符串中第一次出现的索引
int indexOf(String str):返回指定字符串在此字符串中第一次出现的索引
int indexOf(String str,int fromIndex);返回指定字符串在此字符串中指定位置后第一次出现的索引
int indexOf(int ch,int fromIndex):返回指定字符在此字符串中指定位置后第一次出现的是索引
String substring(int start):从指定位置开始截取字符串,默认到末尾
String substring(int start,int end):从指定位置开始到指定位置结束截取字符串
String s1="helloworld";
System.out.println(s1.length());

//char charAt(int index):获取指定索引位置的字符
System.out.println("charAt="+s1.charAt(5));

//int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引;
System.out.println(s1.indexOf(100));
System.out.println(s1.indexOf('d'));

//int indexOf(String str):返回字符串在此字符串中第一次出现处的索引
System.out.println(s1.indexOf("oworld"));

//int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引
System.out.println(s1.indexOf("or",5));

//int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引
System.out.println(s1.indexOf('o',3));

//String substring(int start):从指定位置开始截取字符串,默认到末尾
System.out.println(s1.substring(2));

//String substring(int start,int end):从指定位置开始到指定位置结束截取字符串
System.out.println(s1.substring(1,9));

String类的转换功能

byte[] getBytes():把字符串转换成字节数组
char[] toCharArray():把字符串转换成字符数组
static String valueOf(char[] chs):把字符数组转换成字符串
static String valueOf(loolean b):把布尔值转换成字符串
//valueOf还能把char,double,float,int ,long,Object转换成字符串
String toLowerCase():把字符串转换成小写
String toUppweCase():把字符串转换成大写
String concat(String str):把两个字符串拼接
        String s1 = "JavaSE";

        // byte[] getBytes():把字符串转换成字节数组
        byte[] byt = s1.getBytes();
        for (int x = 0; x < byt.length; x++)
            System.out.println("byte[]" + byt[x]);

        // char[] toCharArray():把字符串转换成字符数组
        char[] cha = s1.toCharArray();
        for (int x = 0; x < cha.length; x++)
            System.out.println("cha[]="+cha[x]);

        // staic String valueOf(char[] chs):把字符数组转换成字符串
        String s2 = String.valueOf(cha);
        System.out.println("s2="+s2);

        //static String valueOf(boolean b):把布尔类型的数据转换成字符串
        boolean b=true;
        String s3=String.valueOf(b);
        System.out.println("s3="+s3);

        //String toLowerCase():把字符串转换成小写
        String s4=s1.toLowerCase();
        System.out.println("s4="+s4);

        //String toUpperCase():把字符串转换成大写
        String s5=s1.toUpperCase();
        System.out.println("s5="+s5);

        //String concat(String str):把字符串拼接
        String s6="2133213";
        String s7=s1.concat(s6);
        System.out.println("s7="+s7);

String类的其他功能:

替换功能:
String replace(char old,char new):替换字符
String replace(String old,String new):替换字符串
去除字符串两端空格:
String trim();
按字典顺序比较两个字符串:
int compareTo(String str);
int compareToIgnoreCase(String str);
//替换功能
String s1="helloworld";
String s2=s1.replace('h','w');//welloworld
String s3=s1.replace("hello","world");//worldworld
//去除字符两端空格
String s4="   hello    wlrod    ";
String s5=s4.trim();//"hello     world"
//按字典顺序比较两个字符串
String s6="hello";
String s7="hello";
String s8="abc";
String s9="xyz";
System.out.println(s6.compareTo(s7));//打印0
System.out.println(s6.compareTo(s8));//打印7,compartTo比较时是按字典顺序用第一个字符串的首字母减去第二个字符串的首字母,所以是7。如果s6=hello,s7=hel这样时,compareTo是用s6.leng()-s7.leng()
System.out.println(s6.compareTo(s9));//打印-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值