1.java.lang包 无需导包
没有任何继承关系 实现三个接口Serializable CharSequence Comparable
*2.String的构造方法创建对象
String是一个比较特殊的引用数据类型 可以像基本类型一样 创建 赋值
2.1 String str1 = “abc”;//直接将字符串常量赋值给str1(字符串常量)
2.2 String str2 = new String();//无参数构造方法创建空的对象
2.3 String str3 = new String(“abc”);//利用带String类型的参数创建abc对象
2.4 String str4 = new String(byte[]);//利用带byte数组类型的参数创建对象 将数组中的每一个元素转化为对应的char 再把char组合成String
如
byte[] value = new byte[]{65,97,48};
String str = new String(value);//输出Aa0 即对应的Unicode码
2.5 String str5 = new String(char[]);//利用带char数组类型的参数创建对象 将数组中的每一个char元素拼接成最终的String
如
char[] value = {‘a’,’b’,’c’};
String str = new String(value);//输出abc
…………..上面的构造方法都是比较常用的 剩余的就不一一列举
*3.String的不可变特性
体现在两个地方 长度及内容
长度—->final修饰的数组地址引用不变 且数组长度本身不可变
内容—->private修饰的属性 不能在类的外部访问 也就意味着数组的内容不可变
在String类中包含一个数组 private final char[] value; //用来存储String中的每一个字符
所以 final修饰的数组地址不变 且数组长度本身不可变
又private修饰 所以数组中的内容不可改变
*4.常用方法
第一梯队(重写的方法)
equals(); hashCode(); compareTo(); toString();
第二梯队(常用)
charAt(); codePointAt(); length(); concat(); split();
subsring(); indexOf(); lastIndexOf(); toCharArray(); getByte();
matches(); replace(); valueOf();
第三梯队(一般不常用)
contains(); toUpperCase(); toLowerCase(); isEmpty();
startsWith(); endsWith(); trim();
4.1 boolean = equals(Object obj);
//继承自Object类 但是重写了 比较两个字符串中的字面值是否相等
4.2 int = hashCode();
//继承自Object类 但是重写了
(通常重写了equals方法时会伴随着重写hashCode方法)
4.3 int = compareTo(String str);
//实现自Comparable接口 且实现了 按照字典(UniCode编码)索引的顺序比较
如:
String str1 = “abc”;
String str2 = “ab”;
System.out.println(str1.compareTo(str2));//返回长度差 1
//按照两个字符串中长度较短的那个作为比较循环的次数
//挨个比较元素 str1[i] - str2[i]//直到串中第一个不相等字符的位置 来比较二者的Unicode码
//如果长度相等 且串中内容一样 则返回值为0
//长度不等 但是比较完后的内容完全一样 则返回的是长度差
String str3 = “abc”;
String str4 = “aeb”;
System.out.println(str3.compareTo(str4));//-2
//如果长度相等 且串中内容有差别 找到串中第一个不相等字符的位置 返回二者的Unicode码差值
4.4 String = toString();
//继承自Object类 但是重写了 输出的是字符串的字面值
如
Test t = new Test(); //创建类的对象
System.out.println(t);//输出Test@1b6d3586 即为 类名@hashCode
String str = “abcdefabc”;
System.out.println(str);//将toString方法重写了 输出abcdefabc
4.5 char = charAt(int index);
//返回给定index对应位置的那个char值 如”abc” 0号位置 —->输出 a
4.6 int codePointAt(int index);
//返回给定index对应位置的那个char值对应的Unicode的码 如”abc” 0号位置 —->输出 97
4.7 int = length();
//返回字符串的长度
(注意区分数组的length是属性 String的leng()是方法)
4.8 String = concat(String);
//将给定字符串拼接在当前字符串后
如
String str = “abcdef”;
//abcdef的String对象 放在字符串常量池里 即属性char[] value中存着abcdef
//final修饰的数组长度不能改变 数组地址不让变 数组属性私有
str.concat(“g”);
System.out.println(str);//输出的是abcdef
str = str.concat(“g”);
//创建了一个新的String对象
//将上一个 String对象的value值依次取出来 存入新创建的String对象的value属性里 再将g放在后面
//即我们改变的是我们定义的str变量的引用 并没有操作属性本身
//所以我们需要接受返回值才能看到效果
System.out.println(str);//输出的是abcdefg
//这体现了String的不可变特性
若频繁需要拼接字符串—->通常使用的是StringBuilder/StringBuff
4.9 boolean = contains(CharSequence s);
//判断给定的s是否在字符串中存在
如
String str = “abcdef”;
boolean f1 = str.contains(“cd”);//判断连着的字符串是否存在 存在返回true
System.out.println(f1);
boolean f2 = str.contains(“ad”);//a与d不连着 所以返回false
System.out.println(f2);
4.10 boolean = startsWith(String);
//判断此字符是否是已xx开头
boolean = endsWith(String);
//判断此字符是否是已xx结尾
4.11 byte[] = getBytes(); //注意如果byte类型的数组存的是中文 输出的结果会出问题(一个汉字两字节)
char[] = toCharArray();
//这两个方法都是将当前字符串转换成数组
4.12 int = indexOf(String/char[,int fromIndex]);//共有四个方法重载
//找寻给定元素在字符串中第一次出现的位置
如
String str = “abcdefabc”;
int index = str.indexOf(“abc”,3);//返回 6
//找abc 从索引为3的位置往后找 若不存在 返回-1
//返回的值是abc在整个String数组中的索引位置(按首字母位置)
int index1 = str.indexOf(98,7);//返回 -1
//98对应的Unicode码的元素
int = LastIndexOf();//共有四个方法重载
//找寻给定元素在字符串中最后一次出现的位置
4.13 boolean = isEmpty();
//判断字符串是否是空字符串
如
String str = null;
boolean x = str.isEmpty();//空指针异常 对象引用是空的不要紧 但是不能用空引用.
String str1 = “”;
boolean y = str1.isEmpty();//返回true
4.14 replace(char oldChar,char newChar);
//将旧字符串中的字符全部换成指定的字符的 换的只能是单个字母
如 “abcba” (‘a’,’c’)—->输出 cbcbc
replace(CharSequence target,CharSequence replacement);
//将旧字符串中的字符换成新的 可以换给定的字符串(比较常用)
如 “abcbab” (“ab”,”love”)—->输出 lovecblove
replaceAll();
//把指定的旧的字符串 全部 替换成给定的新的字符串
//方法同上
replaceFirst();
//替换的是第一次出现的那个字符串
如
String str = “中国很强,非常强”;
str = str.replace(“强”,”棒”);//输出 中国很棒,非常棒
str = str.replaceAll(“棒”,”猛”);//输出 中国很猛,非常猛
str = str.replaceFirst(“很猛”,”good”);//输出 中国good,非常猛
4.15 String[] = split(String regex[,int limit]);
//按照要求拆分字符串
String str = “a-b-c-d”;
String[] value = str.split(“-“,3);//输出 a b c-d
//按 - 将字符串拆分成三段
4.16 String[] = substring(int beginIndex[,endIndex]);
//按照要求截取字符串 从beginIndex开始 到endIndex结束 若不写endIndex 默认到结尾
String str = “abcdefgh”;
str = str.substring(3,5);//输出 de
//从三号索引 包括三号 到五号索引 不包括五号 左闭右开
4.17 String = toUpperCase();
String = toLowerCase();
//将字符串全部转换成大/小写
4.18 String = trim();
//将字符串 前后的 空格去掉 字符串中间的去不掉
4.19 boolean = matches(String regex);
//regular 有规律的 expression表达式 regex正则表达式
4.20 String = valueOf();//参数可以是int char float 等
//将给定的元素转换成字符串形式