最整洁的常用字符串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

智能推荐

无名对象_class student{public:student(char* pname = "no nam-程序员宅基地

文章浏览阅读168次。代码:#include &lt;iostream&gt;#include &lt;cstring&gt; using namespace std;class Student{public:Student(char* pName="no name",int ssId=0){ strncpy(name,pName,40); name[39]='\0'; id = ssId; cout &lt;&..._class student{public:student(char* pname = "no name"){strcpy(name, p

【Android自定义View】仿Photoshop取色器ColorPicker(二)_android 仿ps吸管效果-程序员宅基地

文章浏览阅读2.3k次。ColorPicker一款仿Photoshop取色器的Android版取色器。github地址:ColorPicker前言上一篇已经简单介绍了ColorPicker的项目结构以及两种颜色空间,接下来我们详细解析一下ColorPicker的核心自定义控件ColorPickerView。ColorPickerView在阅读代码之前,我们先看一下ColorPicker的布局以及一些标注的数值在代码里的变量_android 仿ps吸管效果

计算机系统结构复习(一):Introduction概述_data-level parallelism-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏4次。计算机系统结构复习(一):Introduction概述体系结构发展新趋势定量分析/量化研究方法计算机种类摩尔定律什么是计算机系统结构两个概念计算机系统结构与计算机组成、实现的关系体系结构发展新趋势1.新的模型:Data-level parallelism (DLP):数据级并行Thread-level parallelism (TLP):线程级并行Request-level parallelism (RLP):满足用户需求的并行2.开源架构 RISC-V3.Domain-Specific A_data-level parallelism

surface pro 4 wifi掉线问题-程序员宅基地

文章浏览阅读897次。更新你的无线网卡驱动到最新版本15.68.9032.47,重启。或者运行regedit修改注册表 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\mrvlpcie8897,找到值 “TXAMSDU”把它从1改为0。转载于:https://www.cnblogs.com/misstaste/p/5898571.html..._surface pro 4 无线网卡

不断更新中:中文垃圾邮件过滤规则集Chinese_rules.cf_spamassassin 中文规则-程序员宅基地

文章浏览阅读4.2k次。Chinese_rules.cf的使用方法:下载Chinese_rules.cf,把该规则放在SpamAssassin存放规则的目录(一般在/usr/share/spamassassin或/usr/local/etc/mail/spamassassin)。通过wget下载的命令如下:wget -N -P /usr/share/spamassassin www.service-labs.com/dow_spamassassin 中文规则

mysql基础知识:sql通用语法,及分类(mysql学习纪念)-程序员宅基地

文章浏览阅读349次,点赞10次,收藏11次。2.SQL语句可以使用空格/缩进来增强语句的可读性。1.SQL语句可以单行或多行书写,以分号结尾。3.MySQL数据库的SQL语句不区分大小写。

随便推点

matlab快速入门(7):创建等间距向量_matla间隔相等的向量-程序员宅基地

文章浏览阅读3.8k次,点赞4次,收藏4次。(1)我们经常需要创建一些包含等间距数值的向量,例如以下向量。y = [5 6 7 8]y = 5 6 7 8任务:创建一个名为x(2)对于长向量,输入单个数值是不实际的。可用来创建等间距向量的替代便捷方法是使用:运算符并仅指定起始值和最终值。y = 5:8y = 5 6 7 8请注意,当您使用冒号运算符时,不需要方括..._matla间隔相等的向量

Git的相关操作,创建、更新、提交等,代码托管在码云上_使用git提交代码,git commit -m ' ' 提交、同步代码之后,在码云上备注是乱码。怎-程序员宅基地

文章浏览阅读5.9k次。Git的相关操作,创建、更新、提交等,代码托管在码云上一、环境配置:(1)下载安装Git Bash,具体步骤就不赘述了;(2)双击运行“Git Bash”,配置用户名及邮箱:$ git config --global user.name "xxxxxxx"$ git config --global user.email "[email protected]"_使用git提交代码,git commit -m ' ' 提交、同步代码之后,在码云上备注是乱码。怎

Java多线程之线程池深入分析(下)_线程之 1.7 doacquiresharedinterruptibly解析-程序员宅基地

文章浏览阅读1.4k次。一、数据结构与线程构造方法由于已经看到了ThreadPoolExecutor的源码,因此很容易就看到了ThreadPoolExecutor线程池的数据结构。图1描述了这种数据结构。图1 ThreadPoolExecutor 数据结构其实,即使没有上述图形描述ThreadPoolExecutor的数据结构,我们根据线程池的要求也很能够猜测出其数据结构出来。_线程之 1.7 doacquiresharedinterruptibly解析

JS快速获取图片宽高的方法_图片 src和onload 哪个快-程序员宅基地

文章浏览阅读4.8w次,点赞3次,收藏21次。快速获取图片的宽高其实是为了预先做好排版样式布局做准备,通过快速获取图片宽高的方法比onload方法要节省很多时间,甚至一分钟以上都有可能,并且这种方法适用主流浏览器包括IE低版本浏览器。我们一步一步进入这个过程。一、简陋的获取图片方式1234567891011_图片 src和onload 哪个快

严重: 在路径为/book的上下文中,Servlet[jsp]的Servlet.service()引发了具有根本原因的异常java.lang.ClassNotFoundException: org.a_严重: 在路径为/bookmanage的上下文中,servlet[jsp]的servlet.serv-程序员宅基地

文章浏览阅读6.3k次。严重: 在路径为/book的上下文中,Servlet[jsp]的Servlet.service()引发了具有根本原因的异常java.lang.ClassNotFoundException:这种报错,除了其他人的:还有一种可能:名字不一样,哪怕是空格哪怕是一个空格!..._严重: 在路径为/bookmanage的上下文中,servlet[jsp]的servlet.service()引发了具

ios砸壳_ios砸壳需要 闪退怎么砸-程序员宅基地

文章浏览阅读6.2k次。frida-ios-dump源码地址:​​​​​​GitHub - AloneMonkey/frida-ios-dump: pull decrypted ipa from jailbreak devicefrida-ios-dump是基于frida开发的一键砸壳工具,需要配置frida环境手机配置1)越狱状态2)安装openssh3)安装fridaMac配置1)安装frida,命令行:sudo pip install frida-tools (没有安装pip的话需要先安装pip)_ios砸壳需要 闪退怎么砸

推荐文章

热门文章

相关标签