Java SE String类(一):常用方法(上)

1. 常用方法

1.1 字符串构造

String类的常用构造方法只有以下三种

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

如要使用其他String方法,大家可以查看源码或者是jdk帮助手册
【注意】

  1. String类是引用类型的对象内部其实并不存在字符串本身,我们可以查看String类的部分源码:
public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence,Constable, ConstantDesc {private final byte[] value;//用于存字符串的数组,字符存储在这个数组中形成了字符串private int hash; // 默认为0public String(String original) {//对以上两个成员变量进行构造this.value = original.value;this.hash = original.hash;}}

下面我们用一段代码来说明String是引用类型

public class Main {public static void main(String[] args) {String s1 = "hello";String s2 = new String("world");char[] array = {'h','i'};//创建了3个不同的引用对象String s3 = new String(array);System.out.println(s1);System.out.println(s2);System.out.println(s3);String s4 = s3;//s4和s3指向了同一个引用System.out.println(s4);}
}

字符串的引用方式其实和我们前面提到的数组很类似,因为底层就是数组实现的,我们下面通过画图说明
在这里插入图片描述
2. 在Java中,直接用双引号引起来的对象也是String类

System.out.println("hello");

1.2 字符串的常规方法

  1. 计算长度
public class Main {public static void main(String[] args) {String s1 = "hello";String s2 = new String("world");char[] array = {'h','i'};//创建了3个不同的引用对象String s3 = new String(array);System.out.println(s1);System.out.println(s2);System.out.println(s3);String s4 = s3;//s4和s3指向了同一个引用System.out.println(s4);System.out.println(s3.length());}
}

在这里插入图片描述
我们在这里需要注意的一点是,Java中的字符串不想c语言一样有以‘\0’这样的转义字符结尾的说法有几个字母,字符串就是多长,在上面的运行结果我们可以看到,s3的长度为2

  1. 判空
public class Main {public static void main(String[] args) {String s1 = "hello";String s2 = new String("");//s2为空字符char[] array = {'h','i'};//创建了3个不同的引用对象String s3 = new String(array);System.out.println(s1);System.out.println(s2);System.out.println(s3);String s4 = s3;//s4和s3指向了同一个引用System.out.println(s4);System.out.println(s3.length());System.out.println(s2.isEmpty());}
}

在这里插入图片描述
从上述结果我们可以看出,isEmpty方法如果字符串为空,返回ture,如果不为空,返回false

1.3 String对象的比较

字符串的比较也是常见的操作之一,比如:字符串的排序,Java中总共提供了4种方式

  1. == 比较是否引用同一个对象
    注意:对于内置类型,比较的是变量中的值,对于引用类型比较的是引用中的地址
public class Main {public static void main(String[] args) {int a = 1;int b = 1;int c = 2;String s1 = "hello";String s2 = "hi";String s3 = "hello";String s4 = s1;System.out.println(a == b);//两个值相等System.out.println(a == c);//两个值不相等System.out.println(s1 == s2);//两个字符串不一样System.out.println(s3 == s1);//虽然两个字符串相同,但是指向的引用不同System.out.println(s1 == s4);//指向同一个引用}
}

在这里插入图片描述

需要注意的是,由于String是引用类型,虽然s1和s3相同,但是它们的引用不同,所以返回false
那么我们如果想要比较两个字符串是否相同,我们有办法吗,当然有,我们下面来介绍它

  1. boolean equals(Object anObject) 方法:按照字典序比较
    字典序:按照字符的大小顺序
    String重写了父类Object方法,Objec中默认使用“==”进行比较,String重写后按照如下规则比较:
public boolean equals(Object anObject) {// 1. 先检测this 和 anObject 是否为同一个对象比较,如果是返回trueif (this == anObject) {return true;}// 2. 检测anObject是否为String类型的对象,如果是继续比较,否则返回falseif (anObject instanceof String) {// 将anObject向下转型为String类型对象String anotherString = (String)anObject;int n = value.length;// 3. this和anObject两个字符串的长度是否相同,是继续比较,否则返回falseif (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;// 4. 按照字典序,从前往后逐个字符进行比较while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;
}
public class Main {public static void main(String[] args) {int a = 1;int b = 1;int c = 2;String s1 = "hello";String s2 = "hi";String s3 = "hello";String s4 = s1;System.out.println(a == b);//两个值相等System.out.println(a == c);//两个值不相等System.out.println(s1 == s2);//两个字符串不一样System.out.println(s3 == s1);//虽然两个字符串相同,但是指向的引用不同System.out.println(s1 == s4);//指向同一个引用System.out.println(s1.equals(s3));//两个字符串相同System.out.println(s2.equals(s1));//两个字符串不同}
}

在这里插入图片描述
上述代码我们可以看到,虽然s1和s3指向的是不同的引用,但是只要字符串相同,就返回true
3. int compareTo(String anotherString) 方法:按照字典序比较
与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。具体比较方式:

  1. 先按照字典次序大小比较,如果出现不等的字符直接返回这两个字符的大小差值
  2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值
public class Main {public static void main(String[] args) {String s1 = "hello";String s2 = "hi";String s3 = "hello";String s4 = "helloaaa";System.out.println(s1 == s2);//两个字符串不一样System.out.println(s3 == s1);//虽然两个字符串相同,但是指向的引用不同System.out.println(s1 == s4);//指向同一个引用System.out.println(s1.equals(s3));//两个字符串相同System.out.println(s2.equals(s1));//两个字符串不同System.out.println(s1.compareTo(s2));//返回字典序差值System.out.println(s1.compareTo(s3));//相同返回0System.out.println(s1.compareTo(s4));//前几个字符相同,返回字符串长度只差}}

在这里插入图片描述
4. int compareToIgnoreCase(String str) 方法:与compareTo不同的是忽略大小写进行比较

public class Main {public static void main(String[] args) {String s1 = "Hello";String s2 = "hi";String s3 = "hello";String s4 = "helloaaa";System.out.println(s1 == s2);//两个字符串不一样System.out.println(s3 == s1);//虽然两个字符串相同,但是指向的引用不同System.out.println(s1 == s4);//指向同一个引用System.out.println(s1.equals(s3));//两个字符串相同System.out.println(s2.equals(s1));//两个字符串不同System.out.println(s1.compareTo(s2));//返回字典序差值System.out.println(s1.compareTo(s3));//相同返回0System.out.println(s1.compareTo(s4));//前几个字符相同,返回字符串长度只差System.out.println(s1.compareToIgnoreCase(s3));//忽略大小写进行比较}
}

在这里插入图片描述

1.3 字符串查找

字符串查找也是字符串中非常常见的操作,String类提供了如下查找方法:
在这里插入图片描述

public class Main {public static void main(String[] args) {String s = "aaabbbcccddd";System.out.println(s.charAt(2));System.out.println(s.indexOf('a'));System.out.println(s.indexOf('a',2));System.out.println(s.indexOf("bb"));System.out.println(s.indexOf("bb",4));System.out.println(s.lastIndexOf('d'));System.out.println(s.lastIndexOf('d',10));System.out.println(s.lastIndexOf("dd"));System.out.println(s.lastIndexOf("dd",10));}}

在这里插入图片描述

1.4 转化

  1. 数值和字符串转化
public class Main {public static void main(String[] args) {String s1 = String.valueOf(12);String s2 = String.valueOf(12.12);String s3 = String.valueOf(true);System.out.println(s1);System.out.println(s2);System.out.println(s3);int a = Integer.parseInt(s1);double b = Double.parseDouble(s2);System.out.println(s1);System.out.println(s2);}
}

在这里插入图片描述
2. 大小写转换

public class Main {public static void main(String[] args) {String s1 = "me";String s2 = "YOU";System.out.println(s1.toUpperCase());System.out.println(s2.toLowerCase());}
}

在这里插入图片描述
注意:这里在转化的是一个新的字符串,不是在原来的字符串上修改,因为字符串具有不可变性
3. 字符串转数组和字符串转数组

public class Main {public static void main(String[] args) {String s1 = "abcdefg";char[] array = s1.toCharArray();System.out.println(Arrays.toString(array));String s2 = new String(array);System.out.println(s2);}
}

在这里插入图片描述
4. 格式化字符串

public class Main {public static void main(String[] args) {String s = String.format("%d-%d-%d",2024,3,11);System.out.println(s);}
}

在这里插入图片描述

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

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

相关文章

DeepLearning in Pytorch|我的第一个NN-共享单车预测

目录 概要 一、数据准备 导入数据 数据可视化 二、设计神经网络 版本一 版本二&#xff08;正片&#xff09; 三、测试 小结 概要 我的第一个深度学习神经网络模型---利用Pytorch设计人工神经网络对某地区租赁单车的使用情况进行预测 输入节点为1个&#xff0c;隐含…

大预言模型——ChatGPT,Claude3、Sora、等技术

原文链接&#xff1a;大预言模型——ChatGPT,Claude3、Sora、等技术https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247596849&idx3&sn111d68286f9752008bca95a5ec575bb3&chksmfa823ad6cdf5b3c0c446eceb5cf29cccc3161d746bdd9f26cc060f78c359ec3e2a8f35…

预测建模案例-预防机器故障

预测分析是一种使用当前数据和历史数据来预测活动、行为和趋势的高级分析形式。它涉及将统计分析技术、数据查询和机器学习算法应用于数据集。预测分析还涉及创建预测模型&#xff0c;以对特定操作或事件发生的可能性设置数值或评分。 预测分析寻找数据模式并预测未来趋势&…

day1-C++

1>提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成。 代码&#xff1a; #include <iostream> #include <string.h> using namespace std;int main() {string str ;int low 0, …

智慧公厕系统架构分析及应用探索

智慧公厕是运用物联网技术和云计算平台&#xff0c;实现对公共厕所的智能管理和优化的未来式公共厕所信息化整体解决方案。该系统由应用层、平台层、传输层和感知层组成&#xff0c;各层相互配合&#xff0c;共同构建一个高效、智能的公厕运营环境。 一、感知层&#xff1a; …

Android Kotlin知识汇总(三)Kotlin 协程

Kotlin的重要优势及特点之——结构化并发 Kotlin 协程让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理&#xff0c;例如网络调用、本地数据访问等任务的管理。本主题介绍如何使用 Kotlin 协程解决以下问题&#xff0c;从而让您能够编写出更清晰、更简洁的应用代…

Vue基础之Vuex状态管理

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大二在校生 &#x1f921; 个人主页&#xff1a;坠入暮云间x &#x1f43c;座右铭&#xff1a; 给自己一个梦想&#xff0c;给世界一个惊喜。 &#x1f385;**学习目标: 坚持每一次的学习打卡 文章目录 什么是Vuex&…

Jira自动化的实用工具——ScriptRunner简介及最佳实践

近日&#xff0c;龙智举办的DevSecOps研讨会年终专场“趋势展望与实战探讨&#xff1a;如何打好DevOps基础、赋能创新”在上海圆满落幕。龙智Atlassian技术与顾问咨询团队&#xff0c;以及清晖、JamaSoftware、CloudBees等生态伙伴的嘉宾发表了主题演讲&#xff0c;分享他们在D…

免费分享一套SpringBoot+Vue体育馆(预约)管理系统,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue体育馆(预约)管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue体育馆(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue体育馆(预约)管理系统 Java毕…

【高通camera hal bug分析】高通自带相机镜像问题

首先打了两个log&#xff0c;一个是开启镜像的log&#xff0c;还有一个是没有开启镜像的log&#xff0c;如果我们开启镜像以后&#xff0c;观察开启镜像log发现 , 这段代码走的没有任何问题&#xff0c;因为Flip的值等于1了。 关闭镜像log如下&#xff1a; 如果我们不开启镜像…

灰度发布难以追踪?你可能用错了工具

灰度发布进行可观测性的主要方式是通过收集和分析用户在使用新版本产品或服务时的数据&#xff0c;以此来评估新版本的性能、稳定性和用户满意度。这个过程通常包括以下几个步骤&#xff1a; 定义观测指标&#xff1a;首先&#xff0c;需要定义一套合适的观测指标&#xff08;…

Java Day7 常用API

文章目录 1、Arrays1.1 简述1.2 如何比较对象数组1.2.1 方法1.1.2.2 方式2 2、Lambda3、方法引用3.1 静态方法的引用3.2 实例方法引用3.3 特定类型方法引用3.4 构造器引用 1、Arrays 1.1 简述 操作数组的一个工具类 常见方法 int[] arr{10,20,30,50,40};//将 数组的内容 组…

彩色gif闪图怎么做?分享gif动画的方法

在现在的媒体时代&#xff0c;动态图片已经成为了最流行的分享信息的方式。能够传达动态的视觉效果。那种带有动态效果的闪动文字图片要怎么制作呢&#xff1f;很简单&#xff0c;通过使用在线制作闪字图片工具&#xff0c;上传多张文字内容相同&#xff0c;颜色、位置不同的jp…

【网络原理】使用Java基于TCP搭建简单客户端与服务器通信

目录 &#x1f384;API介绍&#x1f338;ServerSocket API&#x1f338;Socket API &#x1f340;TCP中的长短连接&#x1f333;建立TCP回显客户端与服务器&#x1f338;TCP搭建服务器&#x1f338;TCP搭建客户端 ⭕总结 TCP服务器与客户端的搭建需要借助以下API &#x1f384;…

C语言函数—库函数

函数是什么&#xff1f; 数学中我们常见到函数的概念。但是你了解C语言中的函数吗&#xff1f; 维基百科中对函数的定义&#xff1a;子程序 在计算机科学中&#xff0c;子程序&#xff08;英语&#xff1a;Subroutine, procedure, function, routine, method, subprogram, ca…

c++初阶------类和对象(下)

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

马斯克将在本周,开源类ChatGPT产品Grok

3月11日晚&#xff0c;马斯克在社交平台宣布&#xff0c;将在本周开源生成式AI产品——Grok。 Grok是马斯克旗下公司xAI在去年11月发布的&#xff0c;一款类ChatGPT产品&#xff0c;可以提供生成文本、代码、邮件、信息检索等功能。其测试性能超过GPT-3.5、LLaMA 2 70B&#x…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的铁轨缺陷检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发铁轨缺陷检测系统对于物流行业、制造业具有重要作用。本篇博客详细介绍了如何运用深度学习构建一个铁轨缺陷检测系统&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同模…

Linux运维:深入了解 Linux 目录结构

Linux运维&#xff1a;深入了解 Linux 目录结构 一、 Linux 目录结构与 Windows之间的主要区别二、Linux根目录结构三、常见目录及其作用 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 一、 Linux 目录结构与 Windows之间的主要区别 1、根…

vivado clock ip核的使用

clock 偶数倍分频就是进行计数器计数&#xff0c;奇数倍分频如果不要求占空比的话也是进行计数&#xff0c;如果要求0.5的占空比的话&#xff0c;则需要进行两个计数器&#xff0c; 对于实现占空比为50%的N倍奇数分频&#xff0c;我们可以分解为两个通道&#xff1a; 上升沿触…