最整洁的常用字符串String基础知识_字符串有哪些-程序员宅基地

技术标签: # Java  java  字符串  后端  

类 String 基础知识

一、类 String 简单介绍

  类 Stringjava.lang包下的类,所以不需要导包就可以直接使用。String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

  字符串是常量;它们的值在创建之后不能更改。StringBuffer(字符串缓冲区)支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

  • 记住字符串的三个特点

    1. 字符串的内容永不可变

    2. 正是因为字符串不可改变,所以字符串是可以共享使用的。

    3. 字符串效果上相当于是 char[] 字符数组,但是底层原理是 byte[] 字节数组。

String 是类是一个对象,不是 java 的三类8种基本数据类型。

  • 基本数据类型

    1. 字符型:char

    2. 布尔型:boolean

    3. 数值型:byte、short、int、long、float、double

二、类 String 构造方法

  字符串的构造方法有很多,常见的是一种直接创建的方法和几种构造方法。其中 StringBuffer StringBuilder会在其他文中单独讨论。

  • 直接创建 String str = "Hello"; 右边直接用双引号

  • 常见构造方法

    1. String() :构造一个空。
    2. String(byte[] bytes) :用 byte 数组来构造字符串。
    3. String(char[] value):用 char 数组来构造字符串。
    4. String(String original) :用已存在的字符串来构造新的字符串。
    5. String(StringBuffer buffer) :用字符串缓冲区中的内容来构造新的字符串。
    6. String(StringBuilder builder) :用字符串生成器中的内容来构造新的字符串。
  • 代码示例演示

public class DemoString {
    
    public static void main(String[] args) {
    
        // 使用空参构造
        String str1 = new String();         // 小括号留空,说明字符串什么内容都没有。
        System.out.println("第1个字符串:" + str1);
        // 根据字符数组创建字符串
        char[] charArray = {
     'A', 'B', 'C' };
        String str2 = new String(charArray);
        System.out.println("第2个字符串:" + str2);
        // 根据字节数组创建字符串
        byte[] byteArray = {
     97, 98, 99 };
        String str3 = new String(byteArray);
        System.out.println("第3个字符串:" + str3);
        // 直接创建
        String str4 = "Hello";
        System.out.println("第4个字符串:" + str4);
    }
}
  • 代码运行结果
第1个字符串:
第2个字符串:ABC
第3个字符串:abc
第4个字符串:Hello

三、字符串常量池与 String 内容比较

3.1 字符串常量

  字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。在堆中存放 new 出来的内容。对于基本类型来说,==进行数值的比较。对于引用类型来说,== 是进行地址值的比较。

  • 代码示例演示
public class DemoString {
    

    public static void main(String[] args) {
    
        String str1 = "abc";
        String str2 = "abc";

        char[] charArray = {
    'a', 'b', 'c'};
        String str3 = new String(charArray);

        System.out.println(str1 == str2);       // true
        System.out.println(str1 == str3);       // false
        System.out.println(str2 == str3);       // false
    }
}
  • 内存图解
创建字符串时内存图解

  跟多内存相关的知识会在其他文中详细讲解,期待~

3.2 String 的内容比较

  == 是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用下面两个方法。

  • public boolean equals(Object obj) :参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true;否则返回false。

    1.任何对象都能用Object进行接收。
    2.equals 方法具有对称性,也就是 a.equals(b) 和 b.equals(a) 效果一样。
    3.如果比较双方一个常量一个变量,推荐把常量字符串写在前面。(推荐:“abc”.equals(str) 不推荐:str.equals(“abc”))

  • public boolean equalsIgnoreCase(String str) :忽略大小写,进行内容比较。

  • 代码示例演示

public class De03_String内容比较 {
    

    public static void main(String[] args) {
    
        String str1 = "Hello";
        String str2 = "Hello";
        char[] charArray = {
    'H', 'e', 'l', 'l', 'o'};
        String str3 = new String(charArray);

        System.out.println(str1.equals(str2));      // true
        System.out.println(str2.equals(str3));      // true
        System.out.println(str3.equals("Hello"));   // true
        System.out.println("Hello".equals(str1));   // true

        String str4 = "hello";
        System.out.println(str1.equals(str4));      // false

        String str5 = null;
        System.out.println("abc".equals(str5));       // 推荐:false
        System.out.println(str5.equals("abc"));       // 不推荐:报错,空指针异常NullPointerException

        String strA = "Java";
        String strB = "java";
        System.out.println(strA.equals(strB));              // false,严格区分大小写
        System.out.println(strA.equalsIgnoreCase(strB));    // true,忽略大小写

        // 注意,只有英文字母区分大小写,其他都不区分大小写
        System.out.println("abc一123".equalsIgnoreCase("abc壹123"));  // false
    }
}

四、类 String 常用方法

4.1 与获取相关的方法

  1. public int length():获取字符串当中含有的字符个数,拿到字符串长度。
  2. public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串。
  3. public char charAt(int index):获取指定索引位置的单个字符。(索引从0开始。)
  4. public int indexOf(String str)查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。
  • 注意

    数组a的长度: a.length
    ArrayList集合b的长度: b.size()
    String对象c的长度: c.length()

  • 代码示例演示

class DomoString {
    
    public static void main(String[] args) {
    
      	// 获取字符串的长度
        int length = "asdasfeutrvauevbueyvb".length();
        System.out.println("字符串的长度是:" + length);
				// 拼接字符串
        String str1 = "Hello";
        String str2 = "World";
        String str3 = str1.concat(str2);	
        System.out.println(str1); // Hello,原封不动
        System.out.println(str2); // World,原封不动
        System.out.println(str3); // HelloWorld,新的字符串
        System.out.println("==============");
				// 获取指定索引位置的单个字符
        char ch = "Hello".charAt(1);	
        System.out.println("在1号索引位置的字符是:" + ch);
        System.out.println("==============");
        // 查找参数字符串在本来字符串当中出现的第一次索引位置
        // 如果根本没有,返回-1值
        String original = "HelloWorldHelloWorld";
        int index = original.indexOf("llo");
        System.out.println("第一次索引值是:" + index); // 2
        System.out.println("HelloWorld".indexOf("abc")); // -1
    }
}

4.2 与截取相关的方法

  字符串的截取方法substring 函数。

  1. public String substring(int index):截取从参数位置一直到字符串末尾,返回新字符串。
  2. public String substring(int begin, int end):截取从begin开始,一直到end结束,中间的字符串。[begin,end),包含左边,不包含右边。
  • 代码示例演示
public class DemoString {
    
    public static void main(String[] args) {
    
        String str1 = "HelloWorld";
        String str2 = str1.substring(5);
        System.out.println(str1); // HelloWorld,原封不动
        System.out.println(str2); // World,新字符串
        System.out.println("================");
        String str3 = str1.substring(4, 7);
        System.out.println(str3); // oWo
    }
}

4.3 与转换相关的方法

  String 当中与转换相关的常用方法有:

  1. public char[] toCharArray():将当前字符串拆分成为字符数组作为返回值。
  2. public byte[] getBytes():获得当前字符串底层的字节数组
  3. public String replace(CharSequence oldString, CharSequence newString):将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串。(备注:CharSequence 意思就是说可以接受字符串类型。)
  • 代码示例演示
public class DemoString {
    
    public static void main(String[] args) {
    
        // 转换成为字符数组
        char[] chars = "Hello".toCharArray();
        System.out.println(chars[0]); // H
        System.out.println(chars.length); // 5
        System.out.println("==============");
        // 转换成为字节数组
        byte[] bytes = "abc".getBytes();
        for (int i = 0; i < bytes.length; i++) {
    
            System.out.println(bytes[i]);
        }
        System.out.println("==============");
        // 字符串的内容替换
        String str1 = "How do you do?";
        String str2 = str1.replace("o", "*");
        System.out.println(str1); // How do you do?
        System.out.println(str2); // H*w d* y*u d*?
        System.out.println("==============");
        // 弹幕屏蔽
        String lang1 = "会不会玩儿呀!你大爷的!你大爷的!你大爷的!!!";
        String lang2 = lang1.replace("你大爷的", "****");
        System.out.println(lang2); // 会不会玩儿呀!****!****!****!!!
    }
}

4.4 与分割相关的方法

  String 当中与分割字符串方法:

  1. public String[] split(String regex):按照参数的规则,将字符串切分成为若干部分。
  • 注意

    1.split 方法的参数其实是一个“正则表达式”。其它文中探讨正则表达式。

    2.如果按照英文句点.”进行切分,必须写"\\."(两个反斜杠)

  • 代码示例演示

public class DemoString {
    
    public static void main(String[] args) {
    
        String str1 = "aaa,bbb,ccc";
        String[] array1 = str1.split(",");
        for (int i = 0; i < array1.length; i++) {
    
            System.out.print(array1[i] + " ");
        }
        System.out.println();
        String str2 = "aaa bbb ccc";
        String[] array2 = str2.split(" ");
        for (int i = 0; i < array2.length; i++) {
    
            System.out.print(array2[i] +" ");
        }
        System.out.println();
        String str3 = "XXX.YYY.ZZZ";
        String[] array3 = str3.split("\\.");
        for (int i = 0; i < array3.length; i++) {
    
            System.out.print(array3[i]+" ");
        }
    }
}
  • 代码运行结果
aaa bbb ccc 
aaa bbb ccc 
XXX YYY ZZZ 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ItDaChuang/article/details/111600689

智能推荐

http隧道 java_使用java语言实现http隧道技术-程序员宅基地

文章浏览阅读119次。该楼层疑似违规已被系统折叠隐藏此楼查看此楼/***Getaparametervalue**@paramkeyString*@paramdefString*@returnString*/publicStringgetParameter(Stringkey,Stringdef){returnisStandalone?System.getProperty(ke..._java http隧道

Keepalived高可用+邮件告警_keepalived sendmail-程序员宅基地

文章浏览阅读913次。IP主机名备注192.168.117.14keepalived-master主节点192.168.117.15keepalived-slaver备节点192.168.117.100VIP1.主备节点均安装keepalived# yum install -y keepalived httpd2.主备节点均修改keepalived日志存放路径..._keepalived sendmail

SPFILE 错误导致数据库无法启动(ORA-01565)_ora01565 ora27046-程序员宅基地

文章浏览阅读469次。--==========================================--SPFILE错误导致数据库无法启动(ORA-01565)--========================================== SPFILE错误导致数据库无法启动 SQL> startup ORA-01078: failurein proce_ora01565 ora27046

功能测试基础知识(1)-程序员宅基地

文章浏览阅读6.1k次,点赞2次,收藏54次。功能测试基础知识总结_功能测试

postgresql 中文排序_pg中文排序-程序员宅基地

文章浏览阅读3.2k次,点赞3次,收藏2次。pg 中文首字母排序_pg中文排序

[Mysql] CONVERT函数_mysql convert-程序员宅基地

文章浏览阅读3.1w次,点赞23次,收藏109次。本文主要讲解CONVERT函数_mysql convert

随便推点

HTML5与微信开发(2)-视频播放事件及API属性_微信开发者工具视频快进-程序员宅基地

文章浏览阅读8.6k次,点赞2次,收藏2次。HTML5 的视频播放事件想必大家已经期待很久了吧,在HTML4.1、4.0之前我们如果在网页上播放视频无外乎两种方法: 第一种:安装FLASH插件或者微软发布的插件 第二种:在本地安装播放器,在线播放组件之类的 因为并不是所有的浏览器都安装了FLASH插件,就算安装也不一定所有的都能安装成功。像苹果系统就是默认禁用FLASH的,安卓虽然一开始的时候支持FLASH,但是在安卓4.0以后也开始不_微信开发者工具视频快进

JedisConnectionException Connection Reset_jedisconnectionexception: java.net.socketexception-程序员宅基地

文章浏览阅读5.4k次,点赞3次,收藏4次。在使用redis的过程常见错误总结1.JedisConnectionException Connection Reset参考这边文章:Connection reset原因分析和解决方案https://blog.csdn.net/cwclw/article/details/527971311.1问题描述Exception in thread "main" redis.clients...._jedisconnectionexception: java.net.socketexception: connection reset

Lua5.3版GC机制理解_lua5.3 gc-程序员宅基地

文章浏览阅读8.3k次,点赞8次,收藏42次。目录1.Lua垃圾回收算法原理简述2.Lua垃圾回收中的三种颜色3.Lua垃圾回收详细过程4.步骤源码详解4.1新建对象阶段4.2触发条件4.3 GC函数状态机4.4标记阶段4.5清除阶段5.总结参考资料lua垃圾回收(Garbage Collect)是lua中一个比较重要的部分。由于lua源码版本变迁,目前大多数有关这个方面的文章都还是基于lua5.1版本,有一定的滞后性。因此本文通过参考当前..._lua5.3 gc

手机能打开的表白代码_能远程打开,各种手机电脑进行监控操作,最新黑科技...-程序员宅基地

文章浏览阅读511次。最近家中的潮人,老妈闲着没事干,开始学玩电脑,引起他的各种好奇心。如看看新闻,上上微信或做做其他的事情。但意料之中的是电脑上会莫名出现各种问题?不翼而飞的图标?照片又不见了?文件被删了,卡机或者黑屏,无声音了,等等问题。常常让她束手无策,求助于我,可惜在电话中说不清,往往只能苦等我回家后才能解决,那种开心乐趣一下子消失了。想想,这样也不是办法啊, 于是,我潜心寻找了两款优秀的远程控制软件。两款软件...

成功Ubuntu18.04 ROS melodic安装Cartograhper+Ceres1.13.0,以及错误总结_ros18.04 安装ca-程序员宅基地

文章浏览阅读1.8k次。二.初始化工作空间三.设置下载地址四.下载功能包此处可能会报错,请看:rosdep update遇到ERROR: error loading sources list: The read operation timed out问题_DD᭄ꦿng的博客-程序员宅基地接下来一次安装所有功能包,注意对应ROS版本 五.编译功能包isolated:单独编译各个功能包,每个功能包之间不产生依赖。编译过程时间比较长,可能需要几分钟时间。此处可能会报错:缺少absl依赖包_ros18.04 安装ca

Harbor2.2.1配置(trivy扫描器、镜像签名)_init error: db error: failed to download vulnerabi-程序员宅基地

文章浏览阅读4.1k次,点赞3次,收藏7次。Haobor2.2.1配置(trivy扫描器、镜像签名)docker-compose下载https://github.com/docker/compose/releases安装cp docker-compose /usr/local/binchmod +x /usr/local/bin/docker-composeharbor下载https://github.com/goharbor/harbor/releases解压tar xf xxx.tgx配置harbor根下建立:mkd_init error: db error: failed to download vulnerability db: database download

推荐文章

热门文章

相关标签