栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java】带你从零到一系列15 深入String类2

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java】带你从零到一系列15 深入String类2

前言:String类是我们很常见的一种创建文本的类,但它也有许多有趣的地方,或者是可以深入了解一下的地方,所以我们本篇博客将带你深入String类。

上一篇博客中我们了解了字符串的一些习性,常量池等的东西,然后这一篇我们继续讲解到字符串中的奥秘。

每文一图:

深入String类:
  • 一.字符,字节与字符串
    • 1.字符和字符串
      • ①字符数组转字符串
      • ②部分字符数组转字符串
      • ③指定位置获取字符
      • ④字符串转为字符数组
      • ⑤代码使用例子
    • 2.字节与字符串
      • ①字节数组转字符串
      • ②部分字节数组转字符串
      • ③字符串转字节数组及编码转换
    • 3.字符和字节


一.字符,字节与字符串

我们先来对比和字符串相关的两个东西,字符和字节。

1.字符和字符串

字符串内部包含一个字符数组,String 可以和 char[] 相互转换

对于字符和字符串,我们有一下几种方法转换:

NO方法名称类型描述
1public String(char value[])构造将字符数组中的所有内容变为字符串
2public String(char value[],int offset,int count)构造将部分字符数组中的内容变为字符串
3public char charAt(int index)普通取出指定索引位置的字符,索引从0开始
4public char[] toCharArray()普通将字符串变为字符数组返回

我们挨个介绍:

①字符数组转字符串

第一个是我们的public String(char value[]),是一个将字符数组中的所有内容变为字符串的方法,那么具体用法我们直接看代码:

    public static void main(String[] args) {
        char [] arr ={'a','b','c'};
        String string = new String(arr);
        System.out.println(string);
        //打印abc
    }

实际上这里就是可以把字符数组作为新建字符串对象的内容,把字符数组中的一个一个字符转变成字符串,转变只需要在new字符串的时候,把字符数组的数组名放进去就可以了。


②部分字符数组转字符串

如果我不想把所有字符都转换为字符串,而是希望把字符数组中的一部分字符转变为字符串,我们就可以用这个方法:

    public static void main(String[] args) {
        char [] arr ={'a','b','c','d','e','f'};
        String string = new String(arr,1,3);
        System.out.println(string);
        //打印bcd
    }

这里就是上面创建字符串时放数组名的升级版,也就是多了两个传参,这里的话,第一个还是想要转变的字符数组,然后第二个参数是从哪一个偏移量开始,比如这里就是从偏移量为1处开始,第三个就是取多少个位,这里取了三个,所以打印的是bcd。

这就是以部分字符数组转为字符串。


③指定位置获取字符

既然有字符数组转变为字符串,那我们字符串也有可以转化为字符的方法,这里我们就有一个可以获取指定位置的方法,我们来直接看一下用法:

    public static void main3(String[] args) {
        String str = "hello";//字符串
        char ch = str.charAt(2);//获取下标为2的字符
        System.out.println(ch);
        //打印l
    }

在这里,我们就可以得到下标为2的字符,所以这个方法也就是很简单的一种格式,字符串.charAt(下标)得到这个字符,将其存到ch里,就相当于得到这个字符了。


④字符串转为字符数组

上面只是拿到了其中的一个字符,那么要将字符串转化为字符数组,其实也是有方法的,下面就是这个方法:

    public static void main(String[] args) {
        String str = "hello";//字符串
        char [] chars = str.toCharArray();
        
        for (int i = 0; i < chars.length; i++) {
            System.out.print(chars[i]+" ");
        }
        //打印h e l l o 
    }

上面的这个代码,就是将字符串转化为字符数组的一个方法,同样的是引用字符串,然后用上一个方法叫toCharArray,转换为字符数组存储到了chars中。


⑤代码使用例子

输入一个字符串,判断这个字符串是否全部由数字组成。

    public static boolean isallnum(String s){
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(c < '0' || c > '9'){
                return false;
            }
        }
        return true;

    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        System.out.println(isallnum(str));
        //123456 true
        //123a456 false
        
    }

当然这里也可以用一个包装类中方法,在Character中有一个isDigit方法,是确定指定的字符是否为数字的一个方法。

这就是字符和字符串的相互转换。


2.字节与字符串

写完字符和字符串,其实我们还有字节,这里我们继续说一下字节和字符串的相互转换。

NO方法名称类型描述
1public String(byte bytes[])构造将字节数组变为字符串
2public String(byte bytes[],int offset,int length)构造将部分字节数组中的内容变为字符串
3public byte[] getBytes普通将字符串以字符数组形式返回
4public byte[] getBytes(String charsetName)throws UnsupportedEncodingException普通编码转换处理

同样的,我们来进行挨个介绍:

①字节数组转字符串

字符数组和字节数组就相差在类型上,所以对于数组转字符串,其实是差不多的,也和上面的字符数组转差不多。

    public static void main(String[] args) {
        byte[] bytes = {'h', 'e', 'l', 'l', 'o'};
        String str = new String(bytes);
        //打印hello
    }

②部分字节数组转字符串

其实对于部分字节数组转字符串也差不多,是比较相似的。

    public static void main(String[] args) {
        byte[] bytes = {'h', 'e', 'l', 'l', 'o'};
        String string = new String(arr,1,3);
        System.out.println(string);
       //打印ell
    }

而这个代码我们在IDEA中看到是这样子的,三个参数也有标明上什么,第二个是起始位置,第三个是长度:

这里顺便提一下,当我们把起始位置和长度中间的逗号删去,也就是把1,3变成13,相当于就只有两个参数,会出现这样的一慕:


我们看见String上会被划了一道,其实我们不需要理解这个代码是什么意思,只需要知道,被划痕了一道的方法,表示是过时了的方法,不能再使用了。


③字符串转字节数组及编码转换

这里也是一样的,我们有一个方法可以将字符串转为字节数组:

    public static void main(String[] args) {
        String str = "abcd";
        byte [] bytes = str.getBytes();//getBytes方法
        System.out.println(Arrays.toString(bytes));
        
        //打印[97, 98, 99, 100]
    }

这里我们使用的是getBytes方法,可以将字符串转换为字符数组。

在这里,还有一个值得注意的点,这里的转换中,会用到编码,比如我们可以选择一些编码方式:

public static void main9(String[] args) throws UnsupportedEncodingException {
        String str = "abcd";
        byte [] bytes = str.getBytes("utf-8");//utf-8的编码
        System.out.println(Arrays.toString(bytes));
        //打印[97, 98, 99, 100]
    }
public static void main(String[] args) throws UnsupportedEncodingException {
    String str = "abcd";
    byte [] bytes = str.getBytes("GBK");//GBK编码
    System.out.println(Arrays.toString(bytes));
    //打印[97, 98, 99, 100]
}

虽然说上面两种编码下,字符串str输出的内容还是一模一样的,但是这仅限于英文,当字符串内容换为中文的时候,就会不一样了:

    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "你好";
        byte [] bytes = str.getBytes("GBK");//GBK编码下
        System.out.println(Arrays.toString(bytes));
        //打印[-60, -29, -70, -61]
    }
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "你好";
        byte [] bytes = str.getBytes("utf-8");//utf-8的编码下
        System.out.println(Arrays.toString(bytes));
        //打印[-28, -67, -96, -27, -91, -67]
    }

所以两者是不一样的!!!


3.字符和字节

那么何时使用 byte[], 何时使用 char[] 呢?

byte[] 是把 String 按照一个字节一个字节的方式处理,这种适合在网络传输, 数据存储这样的场景下使用,更适合针对二进制数据来操作。

而 char[] 是把 String 按照一个字符一个字符的方式处理,更适合针对文本数据来操作,尤其是包含中文的时候。


这就是本篇深入String类2的全部内容啦,接下来我们还有深入String类3,里面会讲解到关于字符串的对比查找,以及关于字符串的方法。欢迎关注。一起学习,共同努力!也可以期待这个系列接下来的博客噢。

链接:都在这里! Java SE 带你从零到一系列

还有一件事:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/657989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号