图灵日记之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. 导…...
AMD Ryzen终极调优实战:SMUDebugTool免费工具完整配置指南
AMD Ryzen终极调优实战:SMUDebugTool免费工具完整配置指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…...
原神帧率解锁终极指南:简单三步突破60FPS限制
原神帧率解锁终极指南:简单三步突破60FPS限制 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 原神帧率解锁工具是一款专门为《原神》PC玩家设计的开源工具,能够安…...
seaborn实践
本文章基于豆包整理了使用seaborn生成若干典型图表的示例代码,可供学习seaborn使用。一、图表结果预览二、测试数据生成生成了两组数据,一组是银行贷款存款数据,一组是学生成绩数据,生成数据代码如下:-- 1. 创建数据库…...
终极指南:5分钟让Switch手柄在Windows上完美运行
终极指南:5分钟让Switch手柄在Windows上完美运行 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/gh_mi…...
Llama3-8B微调显存优化实战:在单张RTX 4090上如何用PEFT+TRL跑通SFT?
Llama3-8B微调显存优化实战:单卡RTX 4090的极限挑战 当Meta发布Llama3系列模型时,8B版本因其在消费级硬件上的潜在可行性迅速成为开发者社区的焦点。但将这样一个拥有80亿参数的模型塞进24GB显存的显卡,就像试图把一头大象装进冰箱——理论上…...
为什么你的Midjourney作品总像“褪色胶片”?深度解析--seed稳定性+--style-raw+色彩语义嵌入的黄金三角模型
更多请点击: https://kaifayun.com 第一章:为什么你的Midjourney作品总像“褪色胶片”?——问题本质与视觉诊断 你是否反复生成同一组提示词,却总得到泛黄、低对比、边缘发虚的图像?这不是设备问题,也不是…...
如何用智能弹幕助手告别直播中的重复劳动?B站直播效率提升300%的秘密
如何用智能弹幕助手告别直播中的重复劳动?B站直播效率提升300%的秘密 【免费下载链接】MagicalDanmaku 本仓库及所有相关项目已永久停止开发、维护和任何形式的分发。 项目地址: https://gitcode.com/gh_mirrors/bi/MagicalDanmaku 还在为直播时手忙脚乱而烦…...
React动画革命:react-tween-state 完全指南 - 10分钟掌握React平滑过渡动画
React动画革命:react-tween-state 完全指南 - 10分钟掌握React平滑过渡动画 【免费下载链接】react-tween-state React animation. 项目地址: https://gitcode.com/gh_mirrors/re/react-tween-state react-tween-state 是一款轻量级的 React 动画库ÿ…...
FPGA硬件加速架构设计与AXI Stream优化实践
1. FPGA硬件加速架构设计解析在当今高性能计算领域,FPGA因其可重构特性和并行计算能力,已成为硬件加速的重要选择。我们基于Xilinx Alveo U50 FPGA平台构建的加速系统,采用了分层通道设计和AXI Stream高速互联技术,实现了网络数据…...
基于LSTM的无人艇波浪方向估计:从时序预测到工程实践
1. 项目概述:当无人艇“学会”感知海浪在海洋工程和无人系统领域,让机器“感知”并“理解”它所处的海洋环境,尤其是波浪的动态特性,一直是个核心挑战。想象一下,你驾驶一艘小船,如果能提前几秒甚至更久“预…...
