【Javase基础语法】String类常见的字符串操作方法

引言

个人主页:努力学编程'-CSDN博客

学习领域:C语言进阶,javase基础语法

每日鸡汤:爱意随风起,人生不言弃

字符串的定义:

public static void main(String[] args) {
// 使用常量串构造
String s1 = "hello bit";
System.out.println(s1);
// 直接newString对象
String s2 = new String("hello bit");
System.out.println(s1);
// 使用字符数组进行构造
char[] array = {'h','e','l','l','o','b','i','t'};
String s3 = new String(array);
System.out.println(s1);
}

 String对象的比较

    这里介绍四种字符串的比较方式,这四种不同的方式,有着各自不同的比较方式,这里希望大家可以把这四种都牢记下来。

1.==字符串的比较

public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;
// 对于基本类型变量,==比较两个变量中存储的值是否相同
System.out.println(a == b); // false
System.out.println(a == c); // true
// 对于引用类型变量,==比较两个引用变量引用的是否为同一个对象
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = new String("world");
String s4 = s1;
System.out.println(s1 == s2); // false
System.out.println(s2 == s3); // false
System.out.println(s1 == s4); // true
}

总的来说就是==比较的是否是同一种对象的引用 ,当你new一个字符串时在堆里创建一个新的地址,所以即使两个字符串存放的内容是一致的,但是他们属于不同的地址,所以==会输出false

2.equals

public static void main(String[] args) {
int a = 10;
int b = 20;
int c = 10;
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = new String("world");
String s4 = s1;
System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // false
}

equals在String类中,是用来比较两个字符串的内容是否相同,即只是比较字符串的内容,不管字符串的地址。

3.compareTo

public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("ac");
String s3 = new String("abc");
String s4 = new String("abcdef");
System.out.println(s1.compareTo(s2)); // 不同输出字符差值-1
System.out.println(s1.compareTo(s3)); // 相同输出 0
System.out.println(s1.compareTo(s4)); // 前k个字符完全相同,输出长度差值 -3
}

     此字符串是用来比较字符串的大小的方法,当运行结果>0时,s1>s2,当结果<0时,s1<s2.

有点类似于C语言中的strcmp字符串比较方法,可以对比记忆。

4.compareToIgnoreCase

public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("ac");
String s3 = new String("ABc");
String s4 = new String("abcdef");
System.out.println(s1.compareToIgnoreCase(s2)); // 不同输出字符差值-1
System.out.println(s1.compareToIgnoreCase(s3)); // 相同输出 0
System.out.println(s1.compareToIgnoreCase(s4)); // 前k个字符完全相同,输出长度差值 -3
}

 和compareTo很像,区别是compareToIgnoreCase()比较时会忽略字母的大小写格式,只比较字符是否相等。

字符串的查找

public static void main(String[] args) {
String s = "aaabbbcccaaabbbccc";
System.out.println(s.charAt(3)); // 'b'
System.out.println(s.indexOf('c')); // 6
System.out.println(s.indexOf('c', 10)); // 15
System.out.println(s.indexOf("bbb")); // 3
System.out.println(s.indexOf("bbb", 10)); // 12
System.out.println(s.lastIndexOf('c')); // 17
System.out.println(s.lastIndexOf('c', 10)); // 8
System.out.println(s.lastIndexOf("bbb")); // 12
System.out.println(s.lastIndexOf("bbb", 10)); // 3

字符串的转化

1.数字和字符串的转化

public static void main(String[] args) {
// 数字转字符串
String s1 = String.valueOf(1234);
String s2 = String.valueOf(12.34);
String s3 = String.valueOf(true);
String s4 = String.valueOf(new Student("Hanmeimei", 18));
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
System.out.println("=================================");
// 字符串转数字
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");
System.out.println(data1);
System.out.println(data2);
}

字符串转数字,和数字转字符是非常重要的String类方法在我们后面学习数据结构时可能会经常用到。

2.大小写转化

public static void main(String[] args) {
String s1 = "hello";
String s2 = "HELLO";
// 小写转大写
System.out.println(s1.toUpperCase());
// 大写转小写
System.out.println(s2.toLowerCase());
}

3.字符串转数组

public static void main(String[] args) {
String s = "hello";
// 字符串转数组
char[] ch = s.toCharArray();
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[i]);
}
System.out.println();
// 数组转字符串
String s2 = new String(ch);
System.out.println(s2);
}

我们经常把数组转字符串,将数组以字符串的形式打印。

字符串的替换

1.replaceAll(String regex, String replacement)

String str = "helloworld" ;
System.out.println(str.replaceAll("l", "_"));//这里是把字符串中的'l'全部替换为'-'
System.out.println(str.replaceFirst("l", "_"));//这里是只替换第一次出现'l',改为'-'

字符串拆分

1.split()

String str = "hello world hello bit" ;
String[] result = str.split(" ") ; // 按照空格拆分
for(String s: result) {
System.out.println(s);
}//这里就会产生四个字符串数组然后用for-each打印出来

字符串截取

1.substring(int beginIndex)

String str = "helloworld" ;
System.out.println(str.substring(5));//从索引5开始截取直到最后
System.out.println(str.substring(0, 5));//这个是左开右闭截取字符串

其他字符串操作

1.trim()

去掉字符串中的左右空格 , 保留中间空格
String str = " hello world " ;
System.out.println("["+str+"]");
System.out.println("["+str.trim()+"]");
//这里输出的是hello world

字符串的不可变性

字符串其实不能直接进行修改,当我们直接对字符串进行修改时,内存里会创建一个新的字符串,并没有在原字符串的基础上进行修改

public static void main(String[] args) {
    String str=new String(abcd);
    for(int i=0;i<1000;i++){
    str+=i;
    System.out.println(str);
//你可以思考一下,这个str会在内存里面创建多少个字符串

StringBuilderStringBuffer

      为了解决上面的问题我们使用与String相似的两个类StringBuilderStringBuffer进行字符串的操作。这两个类来修改字符串会直接在源字符串上进行修改。

public static void main5(String[] args) {
        String str="hello";
        StringBuilder stringBuilder=new StringBuilder();
        stringBuilder.append(str);
        stringBuilder.append("world");
        stringBuilder.append(1);
        System.out.println(stringBuilder);
//        当然你字符串都可以在后面加int形数

        String str2="hello";
        StringBuilder stringBuilder1=new StringBuilder();
        stringBuilder1.append(str2);
        for(int i=0;i<1000;i++){
           System.out.println(stringBuilder1.append(i));
//           StringBuilder可以直接对字符串进行操作它的效率就要高得多
        }
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Yakit爆破模块应用

yakit介绍 一款集成了各种渗透测试功能的集成软件。&#xff08;类似于burp&#xff0c;但我感觉他功能挺强大&#xff09; 爆破模块位置 按照下面图标点击 界面就是如下。 左侧可以选择爆破的类型&#xff0c;各种数据库http&#xff0c;ssh等都支持。 爆破参数 可以选择…

spring 面试题

1.springboot自动装配 从 这个META-INF/spring-autoconfigure-metadata.properties加载文件 2.springbean 的生命周期 3.spring 如何解绝循环依赖 private final Map<String, Object> earlySingletonObjects new ConcurrentHashMap<>(16); private final Map&l…

Elasticsearch:在本地使用 Gemma LLM 对私人数据进行问答

在本笔记本中&#xff0c;我们的目标是利用 Google 的 Gemma 模型开发 RAG 系统。 我们将使用 Elastic 的 ELSER 模型生成向量并将其存储在 Elasticsearch 中。 此外&#xff0c;我们将探索语义检索技术&#xff0c;并将最热门的搜索结果作为 Gemma 模型的上下文窗口呈现。 此外…

C++入门篇(1)

目录 1. C关键字 2. 命名空间 2.1 命名空间的定义 2.2 命名空间的访问 2.3 命名空间的使用 3. C的输入和输出 4. 缺省参数 4.1 缺省参数的概念 4.2 缺省参数的分类 5. 函数重载 5.1 函数重载的概念 5.2 函数重载的原理 5.3 C语言内部函数名修饰规则 5.4 C内部函数名…

python 如何使用 NLPchina 开源sql插件,提供代码

分享一段使用python&#xff0c;通过使用发送post请求的方式&#xff0c;来从es集群中获取数据。不用使用 elasticsearh&#xff0c;仅需要导入request和json包即可。 开源sql插件官方 文档 GitHub - NLPchina/elasticsearch-sql: Use SQL to query Elasticsearch 示例代码 调…

【数据结构六】图文结合详解二叉树(五千字)

二叉树 树是一种非线性的数据结构&#xff0c;它是由n个结点组成的具有层次关系的集合&#xff0c;把他叫做树是因为它的根朝上&#xff0c;叶子朝下&#xff0c;看起来像一颗倒挂的树。二叉树是一种最多只有两个节点的树型结构。这篇文章会用Java代码手撕二叉树的实现&#xf…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的木材表面缺陷检测系统(深度学习+Python代码+UI界面+训练数据集)

摘要&#xff1a;开发高效的木材表面缺陷检测系统对于提升木材加工行业的质量控制和生产效率至关重要。本篇博客详细介绍了如何运用深度学习技术构建一个木材表面缺陷检测系统&#xff0c;并提供了完整的实现代码。该系统采用了强大的YOLOv8算法&#xff0c;并对YOLOv7、YOLOv6…

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题能修复吗?修复后灯罩颜色和之前相比有什么变化?

答案是肯定的&#xff0c;汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题是可以修复的。 修复后的汽车灯罩颜色可能会与之前有所不同&#xff0c;这主要取决于修复的方法和使用的材料。 首先&#xff0c;如果修复过程中使用了喷漆翻新&#xff0c;那么灯罩的颜色可能会与原来…

工业涂装行业的物联网解决方案

工业涂装行业的物联网解决方案 工业涂装行业在制造业中占据重要地位&#xff0c;其产品质量直接影响到最终产品的外观和性能。然而&#xff0c;传统涂装生产线容易出现质量问题&#xff0c;如色差、光泽度不均、橘皮现象等。为了解决这些问题&#xff0c;工业涂装行业需要寻求…

一条 sql 语句可能导致的表锁和行锁以及死锁检测

锁 MDL 当对一个表做增删改查操作的时候&#xff0c;加 MDL 读锁&#xff1b;当要对表做结构变更操作的时候&#xff0c;加 MDL 写锁 ALTER TABLE tbl_name NOWAIT add column ... ALTER TABLE tbl_name WAIT N add column ... …

2000-2023年7月全国各省专利侵权结案案件数量数据

2000-2023年7月全国各省专利侵权结案案件数量数据 1、时间&#xff1a;2000-2023年7月 2、指标&#xff1a;地区、年份、专利侵权纠纷行政案件-结案数目 3、范围&#xff1a;31省 4、来源&#xff1a;国家知识产权局&#xff0c;并由该局每个月公布的数据汇总而成 5、指标…

Linux学习笔记(一)Linux基本指令

文章目录 前言目录常见命令1. pwd 打印当前所在路径2. cd 改变路径、切换路径3. 家目录 回到顶级目录4. 当前路径和上一路径5. 上一次路径6. 绝对路径和相对路径7. ls 列出目录内容8. mkdir 创建目录9. rmdir 删除目录10. touch 创建文件11. mv 修改文件目录、移动路径12. cp 复…

12、设计模式之代理模式(Proxy)

一、什么是代理模式 代理模式属于结构型设计模式。为其他对象提供一种代理以控制对这个对象的访问。 在某些情况下&#xff0c;一个对象不适合或者不能直接引用另一个对象&#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。 二、分类 代理模式分为三类&#…

java-单列集合-set系列

set集合继承collection,所以API都差不多&#xff0c;我就不多加介绍 直接见图看他们的特点 我们主要讲述的是set系列里的HashSet、LinkedHashSet、TreeSet HashSet HashSet它的底层是哈希表 哈希表由数组集合红黑树组成 特点&#xff1a;增删改查都性能良好 哈希表具体是…

Seata 2.x 系列【8】Spring Cloud 集成客户端

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 前言2. 问题演…

如何解决跨网文件交换行为分散难管控等问题?

跨网文件交换是指在不同的网络环境之间&#xff0c;如内网和外网&#xff0c;安全地传输文件的过程。这通常涉及到网络隔离的场景&#xff0c;比如政府机构、金融机构、大型企业等&#xff0c;它们为了安全和保密的需要&#xff0c;会通过物理隔离、逻辑隔离等方式&#xff0c;…

《向量数据库指南》——Milvus Cloud BYOC:为数据安全而生?

最近,整个硅谷都在关注 OpenAI 和 Anthropic 的动态。先是 Anthropic 发布了 Claude 3,剑指 GPT-4,被媒体认为“打破了 OpenAI 不可战胜的神话”。这也点燃了整个科技圈的热情,纷纷期待 OpenAI 放出 GPT-5 应战。随后(美东时间 3 月 5 日),OpenAI 发布一则官方公告,主题…

算法打卡day14|二叉树篇03|104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

算法题 Leetcode 104.二叉树的最大深度 题目链接:104.二叉树的最大深度 大佬视频讲解&#xff1a;二叉树的最大深度视频讲解 个人思路 可以使用层序遍历&#xff0c;因为层序遍历会有一个层数的计算&#xff0c;最后计算到的层数就是最大深度&#xff1b; 解法 迭代法 就是…

基于SWOT的智能手机企业财务战略研究1.62

摘 要 近些年&#xff0c;网络技术日新月异&#xff0c;智能手机深受消费者喜爱&#xff0c;人们通过网络&#xff0c;手机应用&#xff0c;可以极大地方便人们学习&#xff0c;工作等等。由于国家对电信行业的大力支持&#xff0c;中国消费者群体逐步成为最具潜力的手机购买者…

基于单片机的IC 卡门禁系统设计

摘要:针对传统门锁钥匙易丢失、配置不便和忘记携带等问题,提出了一种基于STC89C52 的IC 卡门禁系统设计。该系统以STC89C52 单片机为核心来控制电子锁模块的开关。主要过程是由RFID 模块读取IC卡ID 并通过串口发送至STC89C52 单片机模块,STC89C52 单片机模块可以实现在线对I…