一、java API
1、String
String是一个类,且不能有子类(被final修饰),不可复写其功能。
字符串是一个特殊的对象,字符串一旦初始化就不能被改变。
(1)String s1 = “abc”; s1是类类型变量,一定指向abc对象。若s1=”kk”;s1只是指向了kk,而s1未变。
String s2 = new String(“abc”); s2在堆内存中有两个对象。
此时,s1==s2;是错的,比较的是对象的地址。
s1.equals(s2);是正确的,比较的是对象中的内容。
(2)字符串的操作
A、获取
String s1 = "wangtingting";
//获得字符串的长度(字符串中包含的字符数)
int x = s1.length();
//根据字符串的索引(位置)获取该位置的字符
char ch1 = s1.charAt(3);
//根据字符获取某个字符在该字符串中的位置(返回的是该字符第一次出现的位置)
int i1 = s1.indexOf('a');
//获取从指定位置开始,该字符在字符串出现的位置
int i2= s1.indexOf('i', 6);
//i字符在该字符串中第一次出现的位置
int i3 = s1.indexOf('i');
//n字符串在该字符串中第一次出现的位置
int i4 = s1.indexOf("n");
//可以索引该字符串第一次在整个字符串出现的位置,如果返回-1,则该字符串p不在整个字符串中存在
//也可用于对指定字符串判断是否存在
int i7 = s1.indexOf("p");
//n该字符串从指定位置(索引3)开始,在字符串中出现的位置(且是该字符串在指定位置后的第一次出现的位置)
int i5 = s1.indexOf("n",3);
//该字符在整个字符串中最后出现的位置
int i6 = s1.lastIndexOf('i');
System.out.println(i7);
B、判断
String s2 = "wangtingting";
//字符串中是否包含某一字串
boolean b1 = s2.contains("ting");
//判断字符串是否为空(字符串长度是否为0)
boolean b2 = s2.isEmpty();
//判断该字符串是否是以字符串ti开头
boolean b3 = s2.startsWith("ti");
boolean b4 = s2.endsWith("ng");
//判断给出的字符串是否和s字符串相同
boolean b5 = s2.equals("wangtingting");
//判断给出的字符串是否和s字符串的内容相同,并忽略大小写
boolean b6 = s2.equalsIgnoreCase("Wangtingting");
System.out.println(b6);
C、转换
char[] arr = {'e','f','h','l','m','o','r','y'};
//使用构造函数的方法将字符数组转换成字符串
String str1 = new String(arr);
//将字符数组中的一部分转换成字符串。 起始位 转换的个数
//String(char[] value, int offset, int count)
String str2 = new String(arr,3,4);
//str2 =arr.copyValueOf(arr);
System.out.println(str2);
//将字符串转成字符数组
byte[] bt = {'g','r','z','y','j','m'};
String str3 = new String(bt);
System.out.println(str3.toCharArray());
D、切割和替换
public static void splitAndReplace()
{
//替换
String str3 = new String("wangting");
//用新字符串替代原字符串中的内容
//若替换的字符串不存在,则返回原字符串"你好"
System.out.println(str3.replace("ting","shan"));
//以,将字符串切割
String stri = "wangwu,lisi,zhangsan";
String[] arr1 = stri.split(",");
for (int x = 0;x<arr1.length ;x++ )
{
System.out.println(arr1[x]);
}
//默认获得的是从位置3(包含3)开始以后的子串
System.out.println(str3.substring(3));
//获取的是包含头4不包含尾7的子串
System.out.println(str3.substring(4,7));
//将字符串转换为大小写
String str4 = new String("WANGSHAN");
System.out.println(str3.toUpperCase());
System.out.println(str4.toLowerCase());
//将字符串中的空格去除
String str5 = new String(" WANGSHAN ");
System.out.println(str5.trim());
//对两个字符串进行自然顺序比较
int num = str4.compareTo("hellowangting");
System.out.println(num);
}
2、StringBuffer 字符串缓冲区,相当于一个容器,用于存储字符串该字符串缓冲区的 长度可以变化/可操作多个数据类型/最终会通过toString方法转变成字符串。
(1)添加
StringBuffer sb = new StringBuffer("wangtingting");
//在已有字符串的末端添加内容
System.out.println(sb.append("你好"));
System.out.println(sb.append(true).append(123));
//sb和sb1指向的是同一个对象
StringBuffer sb1 = new StringBuffer("wangtingting");
System.out.println(sb==sb1);
(2)删除
//删除从start到end之间的字符,包含头,不包含尾
StringBuffer sb2 = sb.delete(4,8);
//删除指定位置的字符串
StringBuffer sb3= sb.deleteCharAt(1);
//清空缓冲区
StringBuffer sb4 = sb.delete(0,sb.length());
//获取4位置上的字符
char ch2 = sb.charAt(4);
System.out.println(ch2);
(3)修改
StringBuffer sb0 = new StringBuffer("wangtingting");
//在1位置上插入hello这个字符串
System.out.println(sb0.insert(1,"hello"));
//将字符串ting替换成字符串shan 包含头,不包含尾
System.out.println(sb0.replace(8,12,"shan"));
将字符串中的某个字符替换
sb0.setCharAt(1,'o');
System.out.println(sb0.toString());//或直接打印sb0
(4)反转
将整个字符串反转
System.out.println(sb0.reverse());
(5)将缓冲区中的指定数据存储到指定字符组中
//void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
StringBuffer strb = new StringBuffer("wangshan");
char[] chs = new char[5];
strb.getChars(4,8,chs,1);
for (int x = 0;x<chs.length ;x++ ){
System.out.println("char["+x+"]="+chs[x]+";");
}
3、StringBuilder
StringBuilder也是字符串缓冲区,只是在JDK1.5版本之后出现的新特性。
StringBuffer是线程同步的
StringBuilder是线程不同步的
升级原因: 提高效率、简化书写、提高安全性
基本数据类型对象包装
基本数据类型byte、short、int、long、boolean、float、double、char对应引用数据类型Byte、Short、Integer、Long、Boolean、Float、Double、Character
将数据类型对象包装的作用:用于基本数据类型和字符串之间做转换。
基本数据类型-->字符串
System.out.println(3+" ");
System.out.println(Integer.toString(3));
字符串-->基本数据类型
int num = Integer.parseInt("123");
boolean b = Boolean.parseBoolean("true");
Integer i = new Integer("123"); //打印结果 123
int num2 = i.valueOf("123"); //123
System.out.println(num2);
十进制-->其他进制
System.out.println(Integer.toBinaryString(-6));
System.out.println(Integer.toHexString(60));
System.out.println(Integer.toOctalString(8));
其他进制-->十进制
//将110转换成十进制、二进制、八进制的数
System.out.println(Integer.parseInt("110",10));
System.out.println(Integer.parseInt("110",2));
System.out.println(Integer.parseInt("110",8));
基本数据类型新特性
(1)
Integer x = new Integer("123");
Integer y = new Integer(123);
System.out.println(x==y); //false
System.out.println(x.equals(y));//true
x和y的地址值不同,
但x和y指向的内容相同。
(2)
Integer x1= 4;
System.out.println(x1+2);
自动装箱:x1代表的是一个对象,是引用数据类型,由于自动装箱功能,x1可以直接这样写。
自动拆箱:x1+2 ,将类类型变量直接作为值进行运算。