【Java】详解String类中的各种方法

news2024/11/24 16:59:33

创建字符串

常见的创建字符串的三种方式:

// 方式一
String str = "hello world";
// 方式二
String str2 = new String("hello world");
// 方式三
char[] array = {'a', 'b', 'c'};
String str3 = new String(array);

"hello" 这样的字符串字面值常量, 类型也是 String.
String 也是引用类型. String str = "Hello"; 这样的代码内存布局如下:

 

 下面我来写一个代码:

String str1 = "hallo";
String str2 = str1;
str1 = "world";
Systrm.out.println(str2);

很多人是否会认为 str1 的值改变了因此 str2 的值也跟着改变了,事实上 str1 里面的值并非是改变了而是指向了一个新的字符串。所以 str2 里面的值还是 hallo 。

 此时该代码在内存中的布局是这样的:

 判断字符串相等

在整型中我们判断两个整形是否相等用的是一下的方法:

int x = 10;
int y = 10;
if(x == y){
 System.out.println(true);
}

但是在字符串中我们能否也用这个方法呢?

我们用代码试试:

我们乍一看好像是可以的,但是我们换一个方法试试呢?

答案是错误的!

注意: String 使用 == 比较并不是在比较字符串内容, 而是比较两个引用是否是指向同一个对象。

Java 中要想比较字符串的内容, 必须采用String类提供的equals方法。

字符、字节与字符串

字符与字符串

将字符数组转变为字符串

public class Test {
    public static void main(String[] args) {
        char[] array = {'a','b','c','d'};
        String str1 = new String(array);
        System.out.println(str1);
        String str2 = new String(array,0,2);
        System.out.println(str2);
    }
}

输出结果:

 在将字符数组转变为字符串时既可以将整个数组转变为字符串也可以指定范围。

字符串转变为字符数组

public class Test {
    public static void main(String[] args) {
        String str = "abcdef";
        char[] array = str.toCharArray();
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}

输出结果:

获取字符串指定位置的字符

public class Test {
    public static void main(String[] args) {
        String str = "abcdef";
        char ch = str.charAt(1);
        System.out.println(ch);
    }
}

字节与字符串

将字符串转变为字节数组

public class Test {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "halloworld";
        byte[] array = str.getBytes();
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}

运行结果:

字符串常见操作

字符串比较

区分大小写的比较

public class Test {
    public static void main(String[] args) {
        String str1 = "abcd";
        String str2 = "abcd";
        if(str1.equals(str2)){
            System.out.println(true);
        }else{
            System.out.println(false);
        }
    }
}

 不区分大小写的比较

public class Test {
    public static void main(String[] args) {
        String str1 = "abcd";
        String str2 = "AbCd";
        if(str1.equalsIgnoreCase(str2)){
            System.out.println(true);
        }else{
            System.out.println(false);
        }
    }
}

比较两个字符串的大小

public class Test {
    public static void main(String[] args) {
        String str1 = "abcd";
        String str2 = "dsjkowjrd";
        System.out.println(str1.compareTo(str2));
        System.out.println(str1.compareToIgnoreCase(str2));
    }
}

字符串的查找

判断一个子字符串是否存在

public class Test {
    public static void main(String[] args) {
        String str1 = "halloworld";
        System.out.println(str1.contains("world"));
    }
}

查找指定字符串的位置

public class Test {
    public static void main(String[] args) {
        String str = "halloworld";
        System.out.println(str.indexOf("ow"));//从开始往后查找子字符串的位置
        System.out.println(str.indexOf("ow",3));//从指定位置开始往后查找子字符串的位置
        System.out.println(str.lastIndexOf("ow"));//从后往前查找子字符串的位置
        System.out.println(str.lastIndexOf("ow",7));//由指定位置从后往前查找子字符串的位置
    }
}

查找到了则返回子字符串的起始位置,没有查找到则返回 -1。

判断字符串是否以给定字符串开头

public class Test {
    public static void main(String[] args) {
        String str = "halloworld";
        System.out.println(str.startsWith("ha"));//从头开始判断字符串是否以该子字符串开头
        System.out.println(str.startsWith("ll",2));//从指定位置开始判断字符串是否以该子字符串开头
    }
}

判断字符串是否以给定字符串结尾

public class Test {
    public static void main(String[] args) {
        String str = "halloworld";
        System.out.println(str.endsWith("ld"));
    }
}

字符串替换

使用一个指定的新的字符串替换掉已有的字符串数据

public class Test {
    public static void main(String[] args) {
        String str = "halloworld";
        String str1 = str.replaceAll("l","ww");//替换所有的指定内容
        System.out.println(str1);
        String str2 = str.replaceFirst("l","ww");//替换第一个出现的指定内容
        System.out.println(str2);
    }
}

由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串

字符串拆分

可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串

public class Test {
    public static void main(String[] args) {
        String str = "hallo world zhang san";
        String[] array = str.split(" ");//按照指定分隔符拆分成若干个子字符串
        for(String s : array){
            System.out.println(s);
        }
        String[] array1 = str.split(" ",2);//按照指定分隔符拆分成2个字符串
        for(String s : array1){
            System.out.println(s);
        }
    }
}

拆分是特别常用的操作. 一定要重点掌握. 另外有些特殊字符作为分割符可能无法正确切分, 需要加上转义。

例如拆分IP地址:

public class Test {
    public static void main(String[] args) {
        String str = "192.166.1.1";
        String[] array = str.split("\\.");
        for(String s : array){
            System.out.println(s);
        }
    }
}

注意事项:
1. 字符"|","*","+"都得加上转义字符,前面加上"\".
2. 而如果是"",那么就得写成"\\".
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符

字符串的截取

public class Test {
    public static void main(String[] args) {
        String str = "halloworld";
        String str1 = str.substring(5);//从指定位置截取到最后
        String str2 = str.substring(0,5);//截取一个范围的内容
        System.out.println(str1);
        System.out.println(str2);
    }
}

去除字符串左右空格保留中间空格

public class Test {
    public static void main(String[] args) {
        String str = "   hallo world   ";
        String str1 = str.trim();
        System.out.println(str1);
    }
}

字符串转大写

public class Test {
    public static void main(String[] args) {
        String str = "halloworld";
        String str1 = str.toUpperCase();
        System.out.println(str1);
    }
}

字符串转小写

public class Test {
    public static void main(String[] args) {
        String str = "HALLOworld";
        String str1 = str.toLowerCase();
        System.out.println(str1);
    }
}

字符串入池

public class Test {
    public static void main(String[] args) {
        String str = new String("halloworld").intern();
    }
}

字符串连接

public class Test {
    public static void main(String[] args) {
        String str = "hallo";
        String str1 = str.concat("world");
        System.out.println(str1);
    }
}

判断字符串是否为空

public class Test {
    public static void main(String[] args) {
        String str = "";
        System.out.println(str.isEmpty());
    }
}

空的意思是该字符串长度为0.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1904387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows环境安装Redis和Redis Desktop Manager图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Redis概述 Redis是一个开源的高性能键值对数据库&#xff0c;以其卓越的读写速度而著称&#xff0c;广泛用于数据库、缓存和消息代理。它主要将数据存储在内存中&#xff0…

零基础STM32单片机编程入门(九)IIC总线详解及EEPROM实战含源码视频

文章目录 一.概要二.IIC总线基本概念1.总体特征2.通讯流程 三.EEPROM介绍1.M24C08基本介绍2.向M24C08写一个字节时序图3.从M24C08读一个字节时序图 四.GPIO模拟IIC驱动M24C08读写五.CubeMX工程源代码下载六.讲解视频链接地址七.小结 一.概要 IIC(Inter&#xff0d;Integrated …

认识异常详解

1. 异常的定义&#xff1a; 在Java中&#xff0c;异常&#xff08;Exception&#xff09;是在程序执行过程中可能出现的错误或意外情况。异常可以分为两种类型&#xff1a;受检异常&#xff08;Checked Exception&#xff09;和未受检异常&#xff08;Unchecked Exception&…

C9联盟是什么?

九校联盟&#xff08;C9 League&#xff09;&#xff0c;简称C9联盟&#xff0c;是中国首个顶尖大学间的高校联盟&#xff0c;于2009年10月正式启动。 其成员都是国家首批“985工程”重点建设的一流大学&#xff0c;包括北京大学、清华大学、哈尔滨工业大学、复旦大学、上海交通…

水仙花数算法

一、水仙花的传说 希腊神话故事 传说希腊神话里&#xff0c;美少年纳西索斯&#xff08;Narcissus&#xff09;是希腊最俊美的男子&#xff0c;无数的少女对他一见倾心&#xff0c;可他却自负地拒绝了所有的人。这当中包括美丽的山中仙女伊可&#xff08;Echo&#xff09;。伊可…

(南京观海微电子)——MOS管原理及应用区别

MOS管&#xff1a; 全称为金属氧化物半导体场效应管&#xff08;Metal Oxide Semiconductor Field Effect Transistor&#xff09;&#xff0c;也被称为MOSFET&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor&#xff09;。它是一种半导体器件&#xff0c;常用…

Vulkan 学习(1)---- Vulkan 基本概念和发展历史

目录 Vulkan及其演化史Vulkan 基本概念基本术语 Vulkan 的原理Vulkan应用程序Vulkan的编程模型硬件初始化窗口展示表面资源设置流水线设置描述符和描述符缓冲池基于SPIR-V的着色器流水线管理指令的记录队列的提交 Vulkan及其演化史 目前主流的图形渲染API有OpenGL、OpenGL ES、…

Sequelize 操作 MySQL 数据库

安装 npm install --save sequelize安装驱动程序&#xff1a; npm install --save mysql2连接到数据库 要连接到数据库,必须创建一个 Sequelize 实例. 这可以通过将连接参数分别传递到 Sequelize 构造函数或通过传递一个连接 URI 来完成&#xff1a; const {Sequelize} re…

【Linux系统编程】文件系统

介绍&#xff1a; 文件系统是操作系统中负责管理和存储文件信息的软件结构&#xff0c;它组织和管理磁盘上的文件和目录&#xff0c;并定义了文件的存储结构。 Linux文件系统采用树状结构&#xff0c;只有一个根目录&#xff08;用“/”表示&#xff09;&#xff0c;其中含有下…

C++ 函数高级——函数的默认参数

函数默认参数 在C中&#xff0c;函数的形参列表中的形参是可以有默认值的 语法&#xff1a;返回值类型 函数名 &#xff08;参数 默认值&#xff09;{ } 示例&#xff1a; 正确代码&#xff1a; 运行结果&#xff1a;

黑马|最新AI+若依 |初识项目

本章主要内容是&#xff1a; 1.快速搭建了若依前后端项目在本地 2.实现了单表的增删改查快速生成 文章目录 介绍1.若依介绍2.若依的不同版本3.项目运行环境 初始化前后端项目1.下载若依项目2.初始化后端a.把表导入到数据库中b.更改application.yml文件 3.初始化前端a.安装依赖…

java集合(2)

目录 一. Map接口下的实现类 1. HashMap 1.1 HashMap常用方法 2. TreeMap 2.1 TreeMap常用方法 3. Hashtable 3.1 Hashtable常用方法 4.Map集合的遍历 4.1 根据键找值 4.2 利用map中的entrySet()方法 二.Collections类 1.Collections类中的常用方法 三. 泛型 1. 为什…

大连外贸建站公司wordpress主题模板

Robonaut萝卜纳特WP外贸站模板 适合用于工业机器人公司出口做外贸搭建公司官方网站使用的WordPress模板。 https://www.jianzhanpress.com/?p7091 优衣裳WordPress外贸建站模板 简洁的wordpress外贸独立站模板&#xff0c;适合服装、衣服、制衣外贸公司搭建公司官方网站使用…

shark云原生-日志体系-filebeat高级配置(适用于生产)-更新中

文章目录 1. filebeat.inputs 静态日志收集器2. filebeat.autodiscover 自动发现2.1. autodiscover 和 inputs2.2. 如何配置生效2.3. Providers 提供者2.4. Providers kubernetes2.5. 配置 templates2.5.1. kubernetes 自动发现事件中的变量字段2.5.2 配置 templates 2.6. 基于…

人工智能系列-Pandas基础

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” Pandas简介 Pandas是Python语言的拓展程序库&#xff0c;用于数据分析。 Pandas是一个开放源码&#xff0c;BSD许可的库&#xff0c;提供高性能&#xff0c;易于使用的数据结…

vuepress创建步骤

背景 记录vuepress配置步骤&#xff0c;以便下次使用快速上手。 读此文章之前默认您已经学会了创建vuepress项目。vuepres快速开始 最终成品 doc.jeecgflow.com 配置步骤 创建.vuepress 目录。 你的文档目录下创建一个 .vuepress 目录。 创建.vuepress/config.js module.e…

【IMU】 确定性误差与IMU_TK标定原理

1、确定性误差 MEMS IMU确定性误差模型 K 为比例因子误差 误差来源:器件的输出往往为脉冲值或模数转换得到的值,需要乘以一个刻度系数才能转换成角速度或加速度值,若该系数不准,便存在刻度系数误差。 T 为交轴耦合误差 误差来源:如下图,b坐标系是正交的imu坐标系,s坐标系的三…

spring-ai 下载不了依赖spring-ai-openai-spring-boot-starter

第1坑&#xff1a;配置第三方仓库不生效&#xff0c; 提示在阿里云仓库没有找到 spring-ai-openai-spring-boot-starter 第2坑&#xff1a;升级jdk17后&#xff0c;springboot项目启动报错 Internal error (java.lang.reflect.InaccessibleObjectException): Unable to make pr…

第10章:网络与信息安全

目录 第10章&#xff1a;网络与信息安全 网络概述 计算机网络概念 计算机网络的分类 网络的拓扑结构 ISO/OSI网络体系结构 网络互联硬件 物理层互联设备 数据链路层互联设备 网络层互联设备 应用层互联设备 网络的协议与标准 网络标准 TCP/IP协议族 网络接口层协…

【若依前后端分离】通过输入用户编号自动带出部门名称(部门树)

一、部门树 使用 <treeselect v-model"form.deptId" :options"deptOptions" :show-count"true" placeholder"请选择归属部门"/> <el-col :span"12"><el-form-item label"归属部门" prop"dept…