代码改变世界

String类

public final class String extends Object

1、用final修饰的最终类,是代表字符串的类;

2、字符串在底层是以字符数组的形式存储;

3、任何的字符串都是String的对象

4、字符串常量可以共享(下图)

String s1 = “ab”;

String s2 = new String(“ab”); 

s1和s2指向的是同一块内存空间,区别在于s1先指向运行时常量池,运行时常量池再指向堆内存,而s2是先在堆内存中开辟一块空间,用来存储运行时常量池中value的地址,然后根据value所在空间的地址去堆内存中找对应的字符数组,若没有,则在常量池中新开辟一块空间,并在堆内存中创建对应的字符数组,若有,直接调用即可。

String s3 = “a”+“b”;

字符串在使用+拼接的时候底层实际上是调用了StringBuilder中的append的方法

String s4 = “a”; 产生1个对象

s4 = s4+”b” 产生4个对象(new StringBuilder,”b”,”ab”,toString方法会返回一个new String对象)

字符串拼接方式:

1、+

2、直接使用StringBuilder的append方法

3、concat()

StringBuilder和StringBuffer的方法签名一模一样,用法一致,区别在于前者是线程不安全的,后者是线程安全的 

表示没有输入任何字符: str.equals(””)

常用方法:

创建字符串对象:String str = “”;

调用方法:

str.length()   获取字符串长度

str.charAt()   获取指定下标位置字符

str.toCharArray()   将字符串转化为字符数组

字符数组转化为字符串

char[] c = {‘ ’,’ ’,’ ’,};

String str = new String(c);或者String str = new String(c,起始位置,个数); 指定要转换的字符个数

str1.compareTo(str2)   按字典顺序比较两个字符串(相减不为零才返回该差的值,否则会一致遍历,若长度不等,较短与较长对应值都相等,则返回长度之差)

str1.compareToIgnoreCase(str2)   忽略字母大小写进行比较

str.toUpperCase()   转化为大写

str.toLowerCase()   转化为小写

注意:字符串提供了一系列的操作而不改变原字符串的方法,操作的结果是产生一个新的字符串,原字符串并没有发生任何改变

str1.equals(str2)   判断字符串是否相等

str1.equalsIgnoreCase(str2)   忽略大小写

instanceof   判断对象和类的关系

对象 instanceof 类/接口   表示判断对象是否是指定类/接口及其父类/父接口的对象

如果对象的实际类型继承或者实现类/接口,则该对象也是继承或者实现的类/接口的对象

str1.concat(str2)   将新字符串拼接在原字数串尾端(底层实际是数组的复制合并过程)

str.contains(“”)   判断是否包含,只能判断具体子串

str.endsWith(“”)   后缀(判断是否以””中的字符结束)

str.startsWith(“”)   前缀

str.getBytes(“utf-8”)   字符串转字节(括号中可以指定编码,默认是GBK)

str.hashcode()   字符串的哈希码唯一

str.indexOf(‘’)   获取字符/字符串在给定的字符串中第一次出现时的下标,也可以指定从某个下标开始找str.indexOf(“”,count),表示从下标为count的位置开始往后找,若没有该字符/字符串,则返回-1

str.lastIndexOf()   获取字符/字符串在给定的字符串中最后一次出现时的下标,也可以指定从某个下标开始找str.lastIndexOf(“”,count),表示从下标为count的位置开始往前找,若没有该字符/字符串,则返回-1

str.intern()   强制返回指向给定的字符串的常量池地址

str.isEmpty()   判断字符串的长度是否为0,注意区别于null,长度:0 != null

str.replace(‘’,’’)   用指定字符替换原字符

str.substring(起始,结束)   截取指定字符串,一般表示范围的时候,习惯上包头不包尾/含小不含大

str.trim()   去掉字符串前后的空白

String str = String.valueOf()   将其它类型(包括基本类型和引用类型)的数据转化为字符串

注意:打印一个对象(引用类型)时,底层先调用String.valueOf()方法,当对一个对象进行valueOf操作的时候,底层实际上是调用了Object对象的tostring方法,因此输出结果是该对象的地址

特殊的:打印字符数组时,底层也是先调用valueOf()方法,但该方法返回值是new String(),因此输出的结果是对应字符数组的字符串

 

获取字符串中的字符

将字符串用split方法按指定的正则规则切分成字符串数组,遍历该字符串数组,得到单个字符

String s1 = "a,1,2,b,4,d";

String[] s2 = s1.split(",");

for(String c:s2){

    System.out.println(c);

}

字符串和其它类型数据的互相转化

·基本数据类型—>字符串

1、String s = String.valueOf(八种基本类型)

2、String s = “”+八种基本类型数据

3、StringBuilder s = new StringBuilder().append(八种基本类型数据);

·字符串—>基本数据类型

int i = Integer.parseInt();      //这种方法除了字符不适用外,其它七种基本类型都适用,只需要将数据类型换为对应的即可

char c = s.charAt(0);      //字符串转字符(字符串只能有一个字符),其中s是String对象

·数型数组—>字符串(数型数组包括整数和小数)

int[] in = {1,2,3,4,5};
String st = "";
for (int i = 0; i < in.length; i++) {
    String s = String.valueOf(in[i]);
    st += new String(new StringBuilder().append(s));
}
System.out.println(st);

·字符串—>数型数组

String s = "123456";
char[] cs = s.toCharArray();
for (char c : cs) {
    int i = c-'0';
    System.out.println(i);
}

·字符数组—>字符串

char[] cs = {'a','b','c','d','e'};

String s = "";

s+=new String(new StringBuilder().append(cs));

System.out.print(s);

·字符串—>字符数组

String s = "abcde";

char[] cs = s.toCharArray();

for(char c:cs)

    System.out.println(c);

 

posted @ 2018-08-06 22:39  Tracy21  阅读(309)  评论(0编辑  收藏  举报