一、String类如何创建对象,有哪些常用方法
String类 —> 表示一个字符串类【处理字符串数据的操作方法】
String类是使用final修饰符修饰的,说明它没有子类,不可被继承。
例如:
public final class String
Java中所有的字符串文字(例如“abc”)都被实现为此类的实例。
String类的不可变,因此它的值在创建后不能被更改。
String类的构造方法
1.String() 初始化新创建的 String对象,使其表示空字符序列。
2.String(byte[] bytes, int offset, int length) 通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String
3.String(char[] value, int offset, int count) 分配一个新的 String ,其中包含字符数组参数的子阵列中的字符。
4.String(String original) 初始化新创建的String对象,使其表示与参数相同的字符序列; 换句话说,新创建的字符串是参数字符串的副本。
- 其它构造方法:
String(StringBuffer buffer) 分配一个新的字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。
String(StringBuilder builder) 分配一个新的字符串,其中包含当前包含在字符串构建器参数中的字符序列。
例如:
package com.wangxing.test1;
public class TestString {
public static void main(String[] args) {
//String的构造方法
//1、String()创建一个没有初始值的空字符串对象
String str1=new String();
//2.String(byte[] bytes, int offset, int length)
//通过字节数组创建一个字符串对象
//参数1--字节数组--用来创建字符串数据的字节数组
//参数2--int--字节数组的开始位置【字节数组的下标-0】
//参数3--int--字节数组中的元素个数
//将字节数组从开始位置数起,数指定的个数的数据转换成字符串
byte bytearr[]= {97,98,99,100};
String str2=new String(bytearr,0,4);
System.out.println(str2);
//3.String(char[] value, int offset, int count)
//通过字符数组创建一个字符串对象
//参数1--字符数组--用来创建字符串数据的字符数组
//参数2--int--字符数组的开始位置【字节数组的下标-0】
//参数3--int--字符数组中的元素个数
char chararr[]= {'h','e','l','l','o'};
String str3=new String(chararr,2,3);
System.out.println(str3); //llo
//4.String(String original)通过字符串常量创建一个字符串对象
//字符串常量--java程序中双引号包围的就是字符串常量 例如:"hello", ""
String str4=new String("hello");
//String str4=new String("hello");创建出几个对象?
//2个对象
//第一个对象"hello"----内存中的字符串常量池
//第二个对象new String("hello")---内存中的堆区
//5.我们还可以使用与基本数据类型一样的方式来创建String对象
String str5 = "abc";
//上面的程序等价于
char data[] = {'a', 'b', 'c'};
String st6 = new String(data,0,data.length);
//String str5 = "abc";等价于String str5=new String("abc");?
}
}
运行结果:
String的常用方法
1.char | charAt(int index) 从原始字符串中得到指定位置的字符元素 |
2.String | concat(String str)将指定的字符串连接到该字符串的末尾 |
3.boolean | contains(CharSequence s)判断指定的字符串数据是否在原始字符串中存在 |
4.boolean | endsWith(String suffix)测试此字符串是否以指定的后缀结尾 |
5.boolean | startsWith(String prefix)测试此字符串是否以指定的前缀开头 |
6.byte[] | getBytes() 将字符串通过默认的字符编码转换成字节数组 |
byte[] | getBytes(String charsetName)将字符串通过指定的字符编码转换成字节数组 |
7.int | indexOf(String str) 返回指定子字符串第一次出现在字符串内的索引位置 |
8.int | lastIndexOf(String str)返回指定子字符串最后一次出现的字符串中的索引 |
9.boolean | isEmpty()判断字符串是否为空串,此方法为true时,字符串长度一定为0 |
10.int | length() 返回此字符串的长度 |
11.boolean | matches(String regex) 判断字符串数据是否符合正则表达式 |
12.String | replace(CharSequence old, CharSequence new) 将与字面目标序列匹配的字符串的每个子字符串替换为指定的字面替换序列 |
13.String[] | split(String regex)通过指定的符号将字符串拆分成一个字符串数组 |
14.String | substring(int beginIndex)截取从指定的开始位置到字符串结尾的一个子字符串 |
String | substring(int beginIndex, int endIndex) 截取从指定的开始位置到指定的结束位置的一个子字符串 |
15.char[] | toCharArray() 将此字符串转换为新的字符数组 |
16.String | toLowerCase() 大写转小写 |
17.String | toUpperCase() 小写转大写 |
18.String | trim()去除原始字符串的两头空格 |
例如:
package com.wangxing.test1;
public class TestString2 {
public static void main(String[] args) {
String str=new String("Hello,World");
//1.char charAt(int index) 从原始字符串中得到指定位置的字符元素。
char charAt=str.charAt(5);
System.out.println("charAt=="+charAt);
//2.String concat(String str)将指定的字符串连接到该字符串的末尾。[+]
String concat=str.concat(",test");
System.out.println("concat=="+concat);
//3.boolean contains(CharSequence s)判断指定的字符串数据是否在原始字符串中存在
boolean bool=str.contains("abc");
System.out.println("contains=="+bool);
//4.boolean endsWith(String suffix)测试此字符串是否以指定的后缀结尾。
boolean endsWith=str.endsWith("World");
System.out.println("endsWith=="+endsWith);
//5.boolean startsWith(String prefix)测试此字符串是否以指定的前缀开头。
boolean startsWith=str.startsWith("World");
System.out.println("startsWith=="+startsWith);
//6.byte[] getBytes() 将字符串通过默认的字符编码转换成字节数组
byte bytearray[]=str.getBytes();
for(byte val:bytearray) {
System.out.println("val=="+val);
}
//byte[] getBytes(String charsetName)将字符串通过指定的字符编码转换成字节数组
//7.int indexOf(String str) 返回指定子字符串第一次出现在字符串内的索引位置
int index=str.indexOf("l");
System.out.println("index=="+index);
//8.lastIndexOf(String str)返回指定子字符串最后一次出现的字符串中的索引。
int lastIndex=str.lastIndexOf("l");
System.out.println("lastIndex=="+lastIndex);
//9.boolean isEmpty()判断字符串是否为空串,此方法为true时,字符串长度一定为0
boolean isEmpty=str.isEmpty();
System.out.println("isEmpty=="+isEmpty);
//10.int length() 返回此字符串的长度。
int len=str.length();
System.out.println("len=="+len);
//11.boolean matches(String regex) 判断字符串数据是否符合正则表达式
String regex="^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$";
boolean matches="13474682774".matches(regex);
System.out.println("matches=="+matches);
//12.String replace(CharSequence old, CharSequence new) 将与字面目标序列匹配的字符串的每个子字符串替换为指定的字面替换序列
String replace=str.replace("World","你好");
System.out.println("replace=="+replace);
//13.String[] split(String regex)通过指定的符号将字符串拆分成一个字符串数组
String infos[]=str.split(",");
for(String info:infos) {
System.out.println("info=="+info);
}
//14.String substring(int beginIndex)截取从指定的开始位置到字符串结尾的一个子字符串
String sub1=str.substring(6);
System.out.println("sub1=="+sub1);
//String substring(int beginIndex, int endIndex) 截取从指定的开始位置到指定的结束位置的一个子字符串
String sub2=str.substring(2, 9);
System.out.println("sub2=="+sub2);
//15.char[] toCharArray() 将此字符串转换为新的字符数组
char chararray[]=str.toCharArray();
for(char cval:chararray) {
System.out.println("cval=="+cval);
}
//16.String toLowerCase() 大写转小写
String toLowerCase=str.toLowerCase();
System.out.println("toLowerCase=="+toLowerCase);
//17.toUpperCase() 小写转大写
String toUpperCase = str.toUpperCase();
System.out.println("toUpperCase=="+toUpperCase);
//18.String trim()去除原始字符串的两头空格
String strtest=new String(" Hello World ");
System.out.println("去除空格之前=="+strtest.length());
String trimstr=strtest.trim();
System.out.println("trimstr="+trimstr);
System.out.println("去除空格之后=="+trimstr.length());
}
}
二、什么是封装类
(1)只有8种基本数据类型才有与之对应的封装类类型
(2)8种基本数据类型对应的复合数据类型【对象型】
8种基本数据类型对应的java类
基本数据类型 | 封装类类型 |
byte[字节型] | Byte[类] |
short[短整型] | Short[类] |
int[整型] | Integer[类] |
long[长整型] | Long[类] |
float[单精度浮点型] | Float[类] |
double[双精度浮点型] | Double[类] |
char[字符型] | Character[类] |
boolean[布尔型] | Boolean[类] |
1.基本数据类型没有可供调用的方法和变量。封装类有可供调用的变量和方法。
例如:
int num=100;
//int maxnum=num.MAX_VALUE;//错误的
Integer numint=new Integer(1234);
int max=numint.MAX_VALUE;
System.out.println(max);
2.基本数据类型只在内存的栈区有数据分配,封装类在【复合数据类型】内存的栈区和堆区都有内存分配。
3.默认初始值不同。
4.封装类使用的时候要创建对象,new+构造方法
例如:
Integer numint=new Integer(1234);
三、什么是自动装箱和自动拆箱
自动装箱 —> 将基本数据类型转换成对应的封装类类型
1.封装类的构造方法。
2.将基本数据类型变量/数据值直接赋值给对应的封装类变量。
Double dou1=new Double(12.5); //自动装箱
double d1=12.5; //基本数据类型
Double dou2=12.5; //自动装箱
Double dou3=d1; //自动装箱
自动拆箱 —> 将封装类类型转成基本数据类型
Character c=new Character('A');
char charvalu=c;//自动拆箱
四、String类与基本数据类型之间的相互转换
1.将基本数据类型转换成String【static String valueOf(基本数据类型的数据值/变量)】
package com.wangxing.test1;
public class TestString3 {
public static void main(String[] args) {
int num=1234;
String numstring=String.valueOf(num);
System.out.println("numstring=="+numstring);
}
}
2.将String转换成基本数据类型【需要依赖于基本数据类型对应的封装类】
每一个基本数据类型的封装类都有一个转字符串的方法
char | charAt(int index) |
byte | parseByte(String s) |
short | parseShort(String s) |
int | parseInt(String s) |
long | parseLong(String s) |
float | parseFloat(String s) |
double | parseDouble(String s) |
boolean | parseBoolean(String ) |
例如:
String str1=new String("12.5");
double d1=Double.parseDouble(str1);
五、String类与字节数组/字符数组的相互转换
String类与字节数组
(1)String类转换成字节数组
String类的”byte[] getBytes()”/”byte[] getBytes(String charsetName)”
(2)字节数组转换String类型
String类的构造方法String(byte[] bytes, int offset, int length)
String类与字符数组
(1)String类转换成字符数组
String类的”char[] toCharArray()”
(2)字符数组转换String类型
String类的构造方法”String(char[] value, int offset, int count)”
六、String类中的equals(Object anObject)
String类中的equals(Object anObject)
(1)equals方法并不是String类的实例方法,它原本是Object类的实例方法,只是String继承Object类,将这个方法重写了。
(2)所有的java类都默认继承了Object,包括我们自己定义的Java类。只是我们在自定义java类的时候没有使用extends关键字去继承Object类。【一切皆对象】
equals方法的含义是用来做比较的,比较两个对象是否相同。
重点
”==” 与 equals方法的区别
“= =”常用来比较基本数据类型,8种基本数据类型有byte、short、long、double、char、int、float、boolean,因为变量直接存储的就是他们的值,所以用"= ="去比较,比较的就是他们的值。但是复合数据类型用“= =”比较的是他的堆内存地址【引用地址】。
“equals”对于复合数据类型比较的也是它的堆内存地址(不能作用于基本数据类型的变量)。
由于String类重写了equals方法所以String类“equals”比较的是存储对象的内容是否相等
总结