1.StringBuffer类
(1)StringBuffer类概述
在学习Sring类时,我们知道当你创建一个String类的对象时,它的值在创建之后是不可变的,因为它的存储位置在方法区里面的字符串池,所以StringBuffer的出现就解决了上述的问题。我们查询API文档时,称StringBuffer为可变的字符序列,通过某些方法可以改变该序列的长度和内容。其实StringBuffer就像是个容器,里面可以装很多的字符串,并且能够对这些字符串进行各种操作。
(2)StringBuffer类的构造方法
● 构造方法:
StringBuffer() 构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。
StringBuffer(int capacity) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
● public int capacity() 返回容器的理论容量。
● public int length() 返回容器中的字符串长度。
代码演示:
package org.westos.demo;
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
StringBuffer sb1 = new StringBuffer(100);
StringBuffer sb2 = new StringBuffer("abcde");
int capacity = sb.capacity();
int capacity1 = sb1.capacity();
int capacity2 = sb2.capacity();
int length = sb.length();
int length1 = sb1.length();
int length2 = sb2.length();
System.out.println(capacity);
System.out.println(capacity1);
System.out.println(capacity2);
System.out.println(length);
System.out.println(length1);
System.out.println(length2);
}
}
执行结果:
(3)StringBuffer类的添加功能
● public StringBuffer append(String str):把任意类型的数据添加到字符串缓冲区,并返回此字符串缓冲区对象。
● public StringBuffer insert(int offset , String str):在字符串缓冲区的指定位置插入一个字符串,并此返回字符串缓冲区。
代码演示:
package org.westos.demo;
public class StringBufferDemo1 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("abc");
System.out.println(sb);
StringBuffer sb1 = sb.append("defg").append("hi");
System.out.println(sb);
StringBuffer sb2 = sb.insert(0, "ABC");
System.out.println(sb);
}
}
执行结果:
(4)StringBuffer类的删除功能
● public StringBuffer delete(int start, int end) 删除从指定索引start到索引end的字符(不包含end索引上的字符),返回自身对象。
● public StringBuffer deleteCharAt(int index) 删除指定索引上的字符,返回自身对象。
(5)StringBuffer类的替换和翻转功能
● public StringBuffer replace(int start,int end,String str):把从索引strat到end的字符用str字符串替换,返回自身对象。
● public StringBuffer reverse():把字符串翻转。
(6)StringBuffer类的截取功能
● public String substring(int start):从指定索引位置截取到字符串尾部。
● public String substring(int start,int end):从指定索引start截取到end(不包含end)。
(7)StringBuffer类和String类的转换
package org.westos.demo;
public class StringBufferDemo2 {
public static void main(String[] args) {
String str = new String("abc");
//String-->StringBuffer
//方式1:构造方法
StringBuffer stringBuffer = new StringBuffer(str);
//方式2:StringBuffer的append()方法
StringBuffer stringBuffer1 = new StringBuffer();
StringBuffer stringBuffer2 = stringBuffer1.append(str);
//StringBuffer-->String
//方式1:构造方法
StringBuffer stringBuffer3 = new StringBuffer("hello");
String s = new String(stringBuffer3);
//方式2:tostring()
String s1 = stringBuffer3.toString();
//方式3:substring()
String s3 = stringBuffer3.substring(0);
}
}
(8)小案例
需求:把数组中的数据按照指定个格式拼接成一个字符串
举例:
int[] arr = {1,2,3};
输出结果:
“[1, 2, 3]”
用StringBuffer的功能实现
代码:
package org.westos.demo;
public class Test {
public static void main(String[] args) {
int[] arr = {1,2,3};
StringBuffer stringBuffer = new StringBuffer("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length-1){
stringBuffer.append(arr[i]).append("]");
}else{
stringBuffer.append(arr[i]).append(",");
}
}
System.out.println(stringBuffer);
}
}
执行结果:
2. StringBuilder类
StringBuilder类也是字符串缓冲区,那么它和StringBuffer的区别在哪里呢?查询API后我们知道它提供的方法和StringBuffer大致相似,但StringBuilder是线程不安全的,StringBuffer是线程安全的,在运行速度上StringBuffer没有StringBilder快。
总结:
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况。
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。
3. Arrays类
(1)Arrays类概述
此类包含用来操作数组(比如排序和搜索)的各种方法。
(2)Arrsys类中的方法
● public static String toString(int[] a):返回数组的字符串表示形式。
● public static void sort(int[] a):对数组进行排序。
● public static int binarySearch(int[] a,int key):使用二分查找法查找数组中的元素key。
● public static boolean equals(int[] a, int[] a2):比较两个数组是否相等。
● public static int[] copyOf(int[] original, int newLength):复制与原数组为一个长度为newLength的新数组。
●public static int[] copyOfRange(int[] original, int from, int to):复制原数组的元素从指定索引from处到to(不含to)到一个新数组中。
代码实现:
package org.westos.demo;
import java.util.Arrays;
public class ArraysDemo {
public static void main(String[] args) {
int[] arr = new int[]{1,2,6,2,3,4,9,7,8,-1,0};
int[] arr1 = new int[]{1,2,6,2,3,4,9,7,8,-1,0,6};
String string = Arrays.toString(arr);
System.out.println(string);
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
int i = Arrays.binarySearch(arr, 9);
System.out.println(i);
boolean b = Arrays.equals(arr, arr1);
System.out.println(b);
int[] copy = Arrays.copyOf(arr, 4);
System.out.println(Arrays.toString(copy));
int[] copy1 = Arrays.copyOfRange(arr, 0, 5);
System.out.println(Arrays.toString(copy1));
}
}
执行结果:
4. 基本类型的包装类
(1)基本类型的包装类概述
为了对基本类型的数据进行更多的操作,Java对每一种基本数据类型提供了相对应的类类型。
基本类型和包装类的对应:
● byte --------------- Byte
● short --------------Short
● int ------------------Integer
● long ---------------Long
● float --------------- Float
● double -----------Double
● char --------------Character
● boolean ----------Boolean
(2)String类和int类型的转换
public class PackingClass {
public static void main(String[] args) {
int num = 123;
//int------->String
//方式一:
String str = num+"";
//方式二:
String s = String.valueOf(154888451);
//方式三:
Integer integer = new Integer(num);
String string = integer.toString();
System.out.println(string);
//String---->int
//方式一:
int num1 = 100;
Integer integer1 = new Integer(num1);
int i = integer1.intValue();
System.out.println(i);
//方式二:
int i1 = Integer.parseInt("154615");
System.out.println(i1);
}
}
(3)自动装箱和自动拆箱
● 自动装箱:把基本类型转换为它对应的包装类类型。
● 自动拆箱:把包装类类型转换为它对应的基本类型。