共计 5420 个字符,预计需要花费 14 分钟才能阅读完成。
API:(Application Programming Interface, 应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
–< java.lang >– String 字符串:★★★☆java 中用 String 类进行描述。对字符串进行了对象的封装。这样的好处是可以对字符串这种常见数据进行方便的操作。对象封装后,可以定义 N 多属性和行为。
如何定义字符串对象呢?String s = “abc”; 只要是双引号引起的数据都是字符串对象。
特点:字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中。
String s1 = “abc”; // s1 指向的内存中只有一个对象 abc。String s2 = new String(“abc”); // s2 指向的内容中有两个对象 abc、new。
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true,字符串中 equals 比较的是字符串内容是否相同。
字符串的方法:
1:构造方法:将字节数组或者字符数组转成字符串。String s1 = new String();// 创建了一个空内容的字符串。String s2 = null;//s2 没有任何对象指向,是一个 null 常量值。String s3 = “”;//s3 指向一个具体的字符串对象,只不过这个字符串中没有内容。// 一般在定义字符串时,不用 new。String s4 = new String(“abc”);String s5 = “abc”; 一般用此写法 new String(char[]);// 将字符数组转成字符串。new String(char[],offset,count);// 将字符数组中的一部分转成字符串。
2:一般方法:按照面向对象的思想:2.1 获取:2.1.1:获取字符串的长度。length();2.1.2:指定位置的字符。char charAt(int index);2.1.3:获取指定字符的位置。如果不存在返回 -1,所以可以通过返回值 - 1 来判断某一个字符不存在的情况。int indexOf(int ch);// 返回第一次找到的字符角标 int indexOf(int ch,int fromIndex); // 返回从指定位置开始第一次找到的角标 int indexOf(String str); // 返回第一次找到的字符串角标 int indexOf(String str,int fromIndex);
int lastIndexOf(int ch);int lastIndexOf(int ch,int fromIndex);int lastIndexOf(String str);int lastIndexOf(String str,int fromIndex);2.1.4:获取子串。String substring(int start);// 从 start 位开始,到 length()- 1 为止.String substring(int start,int end);// 从 start 开始到 end 为止。// 包含 start 位,不包含 end 位。substring(0,str.length());// 获取整串 2.2 判断:2.2.1:字符串中包含指定的字符串吗?boolean contains(String substring);2.2.2:字符串是否以指定字符串开头啊?boolean startsWith(string);2.2.3:字符串是否以指定字符串结尾啊?boolean endsWith(string);2.2.4:判断字符串是否相同 boolean equals(string);// 覆盖了 Object 中的方法,判断字符串内容是否相同。2.2.5:判断字符串内容是否相同,忽略大小写。boolean equalsIgnoreCase(string) ;
2.3 转换:2.3.1:通过构造函数可以将字符数组或者字节数组转成字符串。2.3.2:可以通过字符串中的静态方法,将字符数组转成字符串。static String copyValueOf(char[] );static String copyValueOf(char[],int offset,int count);static String valueOf(char[]);static String valueOf(char[],int offset,int count);2.3.3:将基本数据类型或者对象转成字符串。static String valueOf(char);static String valueOf(boolean);static String valueOf(double);static String valueOf(float);static String valueOf(int);static String valueOf(long);static String valueOf(Object);2.3.4:将字符串转成大小写。String toLowerCase();String toUpperCase();2.3.5:将字符串转成数组。char[] toCharArray();// 转成字符数组。byte[] getBytes();// 可以加入编码表。转成字节数组。2.3.6:将字符串转成字符串数组。切割方法。String[] split( 分割的规则 - 字符串);2.3.7:将字符串进行内容替换。注意:修改后变成新字符串,并不是将原字符串直接修改。String replace(oldChar,newChar);String replace(oldstring,newstring);2.3.8:String concat(string); // 对字符串进行追加。String trim();// 去除字符串两端的空格
int compareTo();// 如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。
–< java.lang >– StringBuffer 字符串缓冲区:★★★☆构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。特点:1:可以对字符串内容进行修改。2:是一个容器。3:是可变长度的。4:缓冲区中可以存储任意类型的数据。5:最终需要变成字符串。
容器通常具备一些固定的方法:1,添加。StringBuffer append(data): 在缓冲区中追加数据。追加到尾部。StringBuffer insert(index,data): 在指定位置插入数据。2,删除。StringBuffer delete(start,end); 删除从 start 至 end- 1 范围的元素 StringBuffer deleteCharAt(index); 删除指定位置的元素 //sb.delete(0,sb.length());// 清空缓冲区。3,修改。StringBuffer replace(start,end,string); 将 start 至 end- 1 替换成 stringvoid setCharAt(index,char); 替换指定位置的字符 void setLength(len); 将原字符串置为指定长度的字符串 4,查找。(查不到返回 -1)int indexOf(string); 返回指定子字符串在此字符串中第一次出现处的索引。int indexOf(string,int fromIndex); 从指定位置开始查找字符串 int lastIndexOf(string); 返回指定子字符串在此字符串中最右边出现处的索引。int lastIndexOf(string,int fromIndex); 从指定的索引开始反向搜索 5,获取子串。string substring(start); 返回 start 到结尾的子串 string substring(start,end); 返回 start 至 end- 1 的子串 6,反转。
StringBuffer reverse(); 字符串反转
–< java.lang >– StringBuilder 字符串缓冲区:★★★☆JDK1.5 出现 StringBuiler;构造一个其中不带字符的字符串生成器,初始容量为 16 个字符。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。方法和 StringBuffer 一样;
StringBuffer 和 StringBuilder 的区别:StringBuffer 线程安全。StringBuilder 线程不安全。
单线程操作,使用 StringBuilder 效率高。
多线程操作,使用 StringBuffer 安全。
StringBuilder sb = new StringBuilder(“abcdefg”);sb.append(“ak”); //abcdefgaksb.insert(1,”et”);//aetbcdefgsb.deleteCharAt(2);//abdefgsb.delete(2,4);//abefgsb.setLength(4);//abcdsb.setCharAt(0,’k’);//kbcdefgsb.replace(0,2,”hhhh”);//hhhhcdefg
// 想要使用缓冲区,先要建立对象。StringBuffer sb = new StringBuffer();sb.append(12).append(“haha”);// 方法调用链。String s = “abc”+4+’q’;
s = new StringBuffer().append(“abc”).append(4).append(‘q’).toString();
class Test{public static void main(String[] args) {String s1 = “java”;String s2 = “hello”;method_1(s1,s2);System.out.println(s1+”….”+s2); //java….hello
StringBuilder s11 = new StringBuilder(“java”);StringBuilder s22 = new StringBuilder(“hello”);method_2(s11,s22);System.out.println(s11+”—–“+s22); //javahello—–hello}public static void method_1(String s1,String s2){s1.replace(‘a’,’k’);s1 = s2;}public static void method_2(StringBuilder s1,StringBuilder s2){s1.append(s2);s1 = s2;}
}
基本数据类型对象包装类:是按照面向对象思想将基本数据类型封装成了对象。好处:1:可以通过对象中的属性和行为操作基本数据。2:可以实现基本数据类型和字符串之间的转换。
关键字 对应的类名 byte Byteshort Short paserShort(numstring);int Integer 静态方法:parseInt(numstring)long Longfloat Floatdouble Doublechar CharacterBoolean Boolean
基本数据类型对象包装类:都有 XXX parseXXX 方法
只有一个类型没有 parse 方法:Character;
Integer 对象:★★★☆数字格式的字符串转成基本数据类型的方法:1:将该字符串封装成了 Integer 对象,并调用对象的方法 intValue();2:使用 Integer.parseInt(numstring): 不用建立对象,直接类名调用;
将基本类型转成字符串:1:Integer 中的静态方法 String toString(int);2:int+””;
将一个十进制整数转成其他进制:转成二进制:toBinaryString 转成八进制:toOctalString 转成十六进制:toHexStringtoString(int num,int radix);
将其他进制转换十进制:parseInt(string,radix); // 将给定的数转成指定的基数进制;
在 jdk1.5 版本后,对基本数据类型对象包装类进行升级。在升级中,使用基本数据类型对象包装类可以像使用基本数据类型一样,进行运算。Integer i = new Integer(4); //1.5 版本之前的写法;Integer i = 4; // 自动装箱,1.5 版本后的写法;i = i + 5;// i 对象是不能直接和 5 相加的,其实底层先将 i 转成 int 类型,在和 5 相加。而转成 int 类型的操作是隐式的。自动拆箱:拆箱的原理就是 i.intValue();i+ 5 运算完是一个 int 整数。如何赋值给引用类型 i 呢?其实有对结果进行装箱。Integer c = 127;Integer d = 127;System.out.println(c = = d); //true
// 在装箱时,如果数值在 byte 范围之内,那么数值相同,不会产生新的对象,也就是说多个数值相同的引用指向的是同一个对象。