字符串相关的类

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)忽略大小后再比较字符串的大小

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值