图灵日记之java奇妙历险记--String类
目录
- String常用方法
- 字符串构造
- String对象的比较
- 字符串查找
- char charAt(int index)
- int indexOf(int ch)
- int indexOf(int ch, int fromIndex)
- int indexOf(String str)
- int indexOf(String str, int fromIndex)
- int lastIndexOf(String str)
- int lastIndexOf(String str, int fromIndex)
- int lastIndexOf(int ch)
- int lastIndexOf(int ch, int fromIndex)
- 转化
- 数值和字符串转化
- 大小写转换
- 字符串转数组
- 格式化
- 字符串替换
- 字符串拆分
- 字符串截取
- 其他操作方法
- 字符串的不可变性
- StringBuilder和StringBuffer
- StringBuilder
String常用方法
字符串构造
public static void main(String[] args) {//使用常量串构造String a = "asdf";System.out.println(a);String b = new String();System.out.println(b);//直接newString对象String c = new String("ghjk");System.out.println(c);//使用字符数组进行构造char[] arr = {'a','b','c'};String e = new String(arr);System.out.println(e);String f = new String(arr,0,2);System.out.println(f);}
注意
- String是引用类型,内部并不存储字符串
public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("efg");String s3 = s2;}
- 在Java中""引起来的也是String类型对象
System.out.println("abcd".length());
String s4 = "";String s5 = null;
s4指向一个对象为空,s5不指向任何对象
String对象的比较
-
==比较是否引用同一对象
注意:
对于内置类型,比较变量中的值;对于引用类型比较的是引用的地址 -
boolean equals(Object anObject) 方法:按照字典序比较
String类重写父类Object中的equals方法,Object中equals默认按照==比较,重写如下:
public boolean equals(Object anObject) {//判断引用的是不是同一个对象if (this == anObject) {return true;}//判断anObject是不是String类型的对象if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;//判断二者长度if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;//逐个比较字符while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}
- int compareTo(String s)方法:按照字典序进行比较
先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
String s1 = new String("abc");String s2 = new String("abe");System.out.println(s1.compareTo(s2));
如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值
String s1 = new String("abc");String s2 = new String("ab");System.out.println(s1.compareTo(s2));
- int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写
String s1 = new String("abc");String s2 = new String("ABc");System.out.println(s1.compareToIgnoreCase(s2));
字符串查找
char charAt(int index)
返回index位置上的字符,如果index为负数或者越界,抛出IndexOutOfBoundsException异常
String s1 = new String("abcdef");System.out.println(s1.charAt(0));
String s1 = new String("abcdef");for (int i = 0; i < s1.length(); i++) {System.out.print(s1.charAt(i));}
int indexOf(int ch)
返回ch第一次出现的位置,没有返回-1
String s1 = new String("aaaaa");int index = s1.indexOf('a');System.out.println(index);
int indexOf(int ch, int fromIndex)
从fromIndex位置开始找ch第一次出现的位置,没有返回-1
public static void main(String[] args) {String s1 = new String("aaaaa");int index = s1.indexOf('a',2);System.out.println(index);}
int indexOf(String str)
返回str第一次出现的位置,没有返回-1
String s1 = "ababababcd";System.out.println(s1.indexOf("abcd"));
int indexOf(String str, int fromIndex)
从fromIndex位置开始找str第一次出现的位置,没有返回
String s1 = "abcabcabc";System.out.println(s1.indexOf("abc",3));
int lastIndexOf(String str)
从后往前找,返回str第一次出现的位置,没有返回-1
String s1 = "abcabcabc";System.out.println(s1.lastIndexOf("abc"));
int lastIndexOf(String str, int fromIndex)
从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1
String s1 = "abcabcabc";System.out.println(s1.lastIndexOf("abc",5));
int lastIndexOf(int ch)
从后往前找,返回ch第一次出现的位置,没有返回-1
String s1 = "abcdefabcdef";System.out.println(s1.lastIndexOf('a'));
int lastIndexOf(int ch, int fromIndex)
从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返回-1
String s1 = "abcdefabcdef";System.out.println(s1.lastIndexOf('a',5));
转化
数值和字符串转化
数值转字符串
String s1 = String.valueOf(11.1);System.out.println(s1);
字符串转数值
int i = Integer.parseInt("123");
大小写转换
String s1 = "abD";System.out.println(s1.toUpperCase());
字符串转数组
String s1 = "abc";char[] chars = s1.toCharArray();
格式化
String s2 = String.format("%d,%d",3,5);System.out.println(s2);
字符串替换
replace方法进行重载,对参数类型不同
String实现了CharSequence接口,所以CharSequence接口能够接收String类型的数据
String str = new String("abcd");System.out.println(str.replace("ab", "1234"));
字符串拆分
将一个完整的字符串按照指定的分隔符划分为若干个子字符串。
String str = new String("a b c d");String[] strings = str.split(" ");for (int i = 0; i < strings.length; i++) {System.out.println(strings[i]);}
String str = new String("a b c d");String[] strings = str.split(" ",2);for (int i = 0; i < strings.length; i++) {System.out.println(strings[i]);}
注意事项:
- 字符"|“,”*“,”+"都得加上转义字符,前面加上 “\” .
String str2 = new String("1|2|3");String[] strings1 = str2.split("|");for (int i = 0; i < strings1.length; i++) {System.out.println(strings1[i]);}
String str2 = new String("1|2|3");String[] strings1 = str2.split("\\|");for (int i = 0; i < strings1.length; i++) {System.out.println(strings1[i]);}
2. 而如果是 “” ,那么就得写成 “\\” .
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.
String str = new String("ab&cd%ef&gh%ij");String[] strings = str.split("&|%");for (int i = 0; i < strings.length; i++) {System.out.println(strings[i]);}
多次拆分
String str = new String("ab&cd%ef&gh%ij");String[] strings = str.split("&");for (int i = 0; i < strings.length; i++) {String[] strings1 = strings[i].split("%");for (int j = 0; j < strings1.length; j++) {System.out.println(strings1[j]);}}
字符串截取
String substring(int beginIndex)
从指定索引截取到结尾
String str = new String("abcdef");System.out.println(str.substring(2));
String substring(int beginIndex, int endIndex)
截取部分内容
String str = new String("abcdef");System.out.println(str.substring(0, 3));//下标取值范围前闭后开
其他操作方法
String trim()
去掉字符串中的左右空格,保留中间空格
String str = new String(" ab cd ef ");System.out.println(str.trim());
字符串的不可变性
String是一种不可变对象,字符串中的内容是不可改变的,字符串不可呗修改,是因为:
-
String类在设计时就是不可改变的,String类实现描述中已经说明了
String类中的字符实际保存在内部维护的value字符数组中
String类被final修饰,表明该类不能被继承
value被final修饰,表明value自身的值不能改变,即不能引用其他字符数组,但是其引用空间中的内容可以修改 -
所有及设计可能修改字符串内容操作都是创建一个新的对象,对新对象进行修改
final修饰类表示该类不能被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的
StringBuilder和StringBuffer
StringBuilder
由于String不可更改的特性,为了方便字符串修改,java又提供StringBuilder和StringBuffer类,这两个类大部分功能是相同的
String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改.
注意:String和StringBuilder类不能直接转换
String变为StringBuilder:利用StringBuilder的构造方法或append()方法
StringBuilder变为String:调用toString()方法
String,StringBuffer,StringBuilder的区别
String的内容不可修改,StringBuffer与StringBuilder的内容可以修改
StringBuffer与StringBuilder大部分功能是相似的
相关文章:

图灵日记之java奇妙历险记--String类
目录 String常用方法字符串构造String对象的比较字符串查找char charAt(int index)int indexOf(int ch)int indexOf(int ch, int fromIndex)int indexOf(String str)int indexOf(String str, int fromIndex)int lastIndexOf(String str)int lastIndexOf(String str, int fromIn…...
代码随想录算法训练营第六天| 242 有效的字母异位词 349 两个数组的交集 202 快乐数 1 两数之和
目录 242 有效的字母异位词 349 两个数组的交集 202 快乐数 1 两数之和 242 有效的字母异位词 排序 class Solution { public:bool isAnagram(string s, string t) {sort(s.begin(),s.end());sort(t.begin(),t.end());return t s;} }; 时间复杂度O(nlogn) 空间复杂度O(l…...

数学建模--比赛
内容来自数学建模BOOM:【快速入门】北海:数模建模基础MATLAB入门论文写作数学模型与算法(推荐数模美赛国赛小白零基础必看教程)_哔哩哔哩_bilibili 目录 1.学习内容 2.参赛须知 1)参赛作品的组成 2)参赛作品的提交 3.软件安装 4.注意…...

JVM工作原理与实战(十六):运行时数据区-Java虚拟机栈
专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、运行时数据区 二、Java虚拟机栈 1.栈帧的组成 2.局部变量表 3.操作数栈 4.帧数据 总结 前言 JVM作为Java程序的运行环境,其负责解释和执行字节码,管理…...

DC-4靶机刷题记录
靶机下载地址: 链接:https://pan.baidu.com/s/1YbPuSw_xLdkta10O9e2zGw?pwdn6nx 提取码:n6nx 参考: 【【基础向】超详解vulnhub靶场DC-4-爆破反弹shell信息收集】 https://www.bilibili.com/video/BV1Le4y1o7Sx/?share_sourc…...
【前端学习笔记1】css基础
css可以使页面更漂亮,即美化网页 css:层叠样式表 标签选择器: 类选择器: id只能单次调用,类似人的身份证 css里只要是word里面有的功能,他们都有对应的,不会的时候查一下就行 实现垂直居中:h…...

CVE-2023-46226 Apache iotdb远程代码执行漏洞
项目介绍 Apache IoTDB 是针对时间序列数据收集、存储与分析一体化的数据管理引擎。它具有体量轻、性能高、易使用的特点,完美对接 Hadoop 与 Spark 生态,适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。 项目地址 https://io…...

Redis实战之-分布式锁
一、基本原理和实现方式对比 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行…...
Cookie同源策略
同源策略(Same-Origin Policy)是浏览器安全机制的一部分,用于限制一个源(域名、协议和端口的组合)的文档或脚本如何与来自另一个源的资源进行交互。这个策略帮助防止潜在的恶意网站在用户浏览器中执行恶意操作。 关于C…...
6、Numpy形状操纵
目录 1. 使用 reshape 改变形状 2. 使用 resize 改变大小和形状 3. 使用 ravel 或 flatten 展平数组 4. 使用 -1 推断尺寸 5. 使用 newaxis 增加维度 6. 使用 squeeze 移除单维度条目 1. 使用 reshape 改变形状 对于任何 NumPy 数组,你可以使用 reshape 方法来…...

C++初阶类与对象(二):详解构造函数和析构函数
上次为类与对象开了一个头:C初阶类与对象(一):学习类与对象、访问限定符、封装、this指针 今天就来更进一步 文章目录 1.类的6个默认成员函数2.构造函数2.1引入和概念2.2构造函数特性2.2.1特性1~42.2.2注意2.2.3特性5~72.2.4注意 …...

【Vue3】3-3 : 组件之间是如何进行互相通信的
本书目录:点击进入 一、组件之间为什么要做通信 二、组件之间通信方式 2.1、父传子:由传递属性实现 stage 1:申明 (即定义) stage 2:注册 stage 3:使用 【示例】:父组件将 tit…...

网络端口映射和端口转发的区别和联系
目 录 一、端口映射技术 1.1 原理 1.2 应用场景 1、远程访问 2、游戏主机 3、文件共享 4、监控视频共享 二、端口转发技术 2.1 原理 2.2 应用场景 1、网络负载均衡 2、网络安全 3、网络代理 三、端口映射和转发的实现方法 3.1 路由器配置 3.2 网络防火墙 …...

VLSI超大规模集成电路设计复习
目录 VLSI超大规模集成电路设计复习引论MOS原理延时组合逻辑时序电路SRAM 总结(一张纸)参考资料 VLSI超大规模集成电路设计复习 复习可参照官网PPT上的知识点,然后根据知识点对应的去看书上的讲解。 引论 摩尔定律 尺寸缩小定律 N、P型半…...

GCC 内联汇编
LINUX下的汇编入门 AT&T风格 汇编 和GCC风格汇编 汇编代码的调试 前面写了三篇,是自我摸索三篇,摸着石头过河,有些或许是错误的细节,不必在意! 今天我们直接用GCC编译C语言代码,且在C语言里面内嵌AT&T风格的汇编! 前三篇大家了解即可,我们重点放在内嵌汇编里,简单快…...

springboot整合websocket后启动报错:javax.websocket.server.ServerContainer not available
一、场景 Springboot使用ServerEndpoint来建立websocket链接。引入依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>配置Websocket Confi…...
Vue面试之生命周期(上篇)
Vue面试之生命周期(上篇) 创建阶段beforeCreatecreated挂载阶段beforeMountmounted更新阶段beforeUpdateupdated销毁阶段beforeDestroydestroyed补充说明activated...

Gin 框架之用户密码加密
文章目录 一、引入二、密码加密位置三、如何加密四、bcrypt 库加密4.1 介绍4.2 优点:4.3 使用 五、小黄书密码加密实践 一、引入 Gin是一个用Go语言编写的Web框架,而用户密码的加密通常是在应用程序中处理用户身份验证时的一个重要问题。 通常敏感信息…...

【创作活动】ChatGPT 和文心一言哪个更好用?
文章目录 文心一言优点缺点 ChatGPT优点缺点 Java编码能力比较对人工智能的看法 ChatGPT是由OpenAI开发的交互式AI大模型, 文心一言是由百度研发的知识增强大语言模型,本文从Java开发的角度对比一下哪个更好用(本文仅用于投稿CSDN创造活动&am…...

【linux】查看Debian应用程序图标对应的可执行命令
在Debian系统中,应用程序图标通常与.desktop文件关联。您可以通过查看.desktop文件来找到对应的可执行命令。这些文件通常位于/usr/share/applications/或~/.local/share/applications/目录下。这里是如何查找的步骤: 1. 打开文件管理器或终端。 2. 导…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...