1.String类基础
1.String类为什么能解决字符串常见问题
代表字符串的类
目的:利用String提供的方法,来完成对字符串的相关操作
比如字符串内容是否相等的判断-equals()
字符串长度的获取
字符串的反转
字符串的大小写转换
2.String类介绍
1.代表字符串的类
String类实现了序列化接口Serializable支持序列化和反序列化开发。
String类实现了比较器接口Comparable支持自然比较。
String类实现了字符序列化接口CharSequence底层采用了字符序列存储数据
String是一个final类,代表不可以有子类;而底层采取final char[ ]存储字符串。由此可以推断出String类代表的是一个不可变字符序列
3.String类的基本使用
1.导包问题
import 包名.类名;
如:java.lang.String 注意:这个包不需要导入,它默认已经被导入了
2.String类对象的创建
String() | 创建一个空字符串 |
String(byte[ ] bytes) | 将byte数组按照平台默认编码转为字符串 |
String(byte[ ] bytes,String charsetName) | 将byte数组的按照指定编码转为字符串 |
String(byte[ ] bytes,int offset,int length) | 将byte数组的部分内容按照平台默认编码转为字符串;需要设置开始下标,长度。 |
String(byte[ ] bytes,int offset,int length,String charsetName) | 将byte数组的部分内容按照平台默认编码转为字符串;需要设置开始下标,长度。 |
String(char[ ] value) | 将char数组转为字符串 |
String(char[ ] value,int offset,int count) | 将char数组的部分内容转化为字符串;需要指定开始下标,长度; |
1.String类对象的创建演示
/**
* String字符串对象的创建演示
*/
public class TestString {
public static void main(String[] args) throws UnsupportedEncodingException {
/**
* 1) 直接赋值字符串字面量
* String是类名, 其实就是一个数据类型, s1变量名,也称为对象名, 双引号引起来的"hello"才是真正的String对象,
* s1变量保存的是"hello"对象的引用
*/
String s1 = "hello";
System.out.println("s1=" + s1);
/**
* 2) String (byte [] bytes ) 根据字节数组创建String对象
*/
byte[] bytes = {65, 66, 67, 68, 69, 70, 71, 72, 73};//手动定义字节数组
//把bytes字节数组中所有字节, 以当前默认的字符编码UTF-8解析为字符串
String s2 = new String(bytes);
//ABCDEFGHI
System.out.println("s2=" + s2);
/**
* 把bytes数组中从0开始的6个字节解析为字符串
*/
s2 = new String(bytes, 0, 6);
//ABCDEF
System.out.println("s2=" + s2);
/**
* 指定字符编码
* 计算机中, 不管是CPU, 内存, 还是硬盘上,所有的数据都是01二进制形式的, 8个01二进制位组成1个byte字节.
*
* 记事本, Editplus, IDEA文本编辑器中打开文本文件, 显示字符数据, 也可以在文本文件中直接输入字符保存到文件中.
* 这就涉及一个字符与01二进制之间的一个转换问题, 在字符与01序列之间进行转换需要使用字符编码
*
* 字符编码就是字符与一组01序列之间的映射, 这一组01序列称为码值, 8个01二进制位组成1个字节.
* 把字符转换为01序列(码值)过程称为编码, 把一组01序列(码值)转换为字符称为解码,使用文本编辑器打开文本文件时,
* 使用默认的字符编码把文件中的01序列解析为字符显示出来; 在文本编辑器输入文本后, 使用默认的字符编码把这些文本编码为
* 01序列(码值)保存到文件中,将来可能会从文件中读取一组01序列,或者从网络中读取一组01序列, 可以把这一组01序列
* 转换为字符串, 就调用String(byte [] bytes)构造方法,利用字符编码可以巧妙的解决乱码问题
*
* //把bytes数组中所有的字节, 以指定的GB2312编码解析为字符串, 调用String(byte [] bytes, String charsetName)构造方法,
* 会显示语法错误:Unhandled exception: java.io.UnsupportedEncodingException未处理的异常,
* 即这个构造方法有检查异常需要预处理, 当前Alt + Enter, 选择 Add exception to method signature抛出处理,
* 当程序支行后, 如果指定的字符编码Java不支持就会抛出异常
*/
s2 = new String("犯我中华者虽远必诛");
byte[] bs = s2.getBytes("UTF-8");//编码
s2 = new String(bs, "UTF-8");//解码
System.out.println("s2=" + s2);
/**
* 3) String(char [] chars) 把字符数组中的字符连接为字符串
*/
char[] chars = {'a', 'b', '5', '汉', '字', 97};
//char字符类型的变量实际存储的是字符的码值, 给cc变量分配2个字节存储空间, 在这存储空间中存储的是'a'字符的码值97,
//对应的01序列为: 00000000 01100001
char cc = 'a';
//把chars数组中所有的字符连接为字符串
String s3 = new String(chars);
//ab5汉字a
System.out.println(s3);
//把chars数组中从0开始的5个字符连接为字符串
s3 = new String(chars, 0, 5);
System.out.println(s3);
/**
* 4) String()
* new运算符在堆中创建对象, 把对象的引用赋值给数组名
*/
String s4 = new String();
//false
System.out.println(s4 == null);
/**
* 5) String( String )
*/
String s5 = new String(s1);
//hello
System.out.println(s5);
//false
System.out.println(s1 == s5);
}
}
2.从底层来看String对象的创建
String类:代表字符串。java程序中的所有字符串字面值(如”abc“)都作为此类的实例表现。
String是一个final类,代表不可变的字符序列。
字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。
String对象的字符内容是存储在一个字符数组value[ ]中的。
3.String类下常用方法分类情况
1.判断类的
boolean contains(CharSequence s) | 判断当前字符串中是否包含s |
boolean endsWidth(String suffiix) | 判断当前字符串是否以suffix |
boolean startsWith(String prefix) |
判断当前字符串是否以prefix开始 |
2.获取类的
int length() | 返回此字符串的长度 |
String concat(String str) |
将指定的字符串连接到该字符串的末尾 |
char charAt(int index) | 返回指定索引处的char值 |
int indexOf(String str) | 返回指定字符串第一次出现该字符串内的索引 |
String substring(int beginIndex) | 返回一个字符串,从beginIndex开始截取字符串到字符串结尾 |
String substring(int beginIndex,int endIndex) | 返回一个字符串,从beginIndex到endIndex截取字符串,含beginIndex不含endIndex |
33.转换类的
char[ ] toCharArray() | 将此字符串转换为新的字符数组 |
byte[ ] getBytes() | 使用平台的默认字符集将String编码转换为新的字节数组 |
String replace(CharSequence target,CharSequence replacement) | 将与target匹配的字符串使用replacement字符串替换 |
14.分割的类
String[ ] split(String regex) | 将此字符串按照给定的regex(规则)拆分为字符串数组 |
15.比较类的
int compareTo(String anotherString) |
直接比较字符串的大小 |
compareToIgnoreCase(String str) | 忽略大小后再比较字符串的大小 |