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

创建字符串

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

// 方式一
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.xdnf.cn/news/1474551.html

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

相关文章

Allegro X 重置Cadence Product Choices

Allegro X 重置Cadence Product Choices 1、关闭所有打开的工程及文件&#xff1b; 2&#xff1a;File->Change Product可选状态&#xff0c;点选之&#xff1b; 3&#xff1a;根据需要设置或者勾选Use as default 4&#xff1a;OK确认选择

机器学习 | 随机梯度下降分类器

数据科学和机器学习工具包中用于各种分类任务的一个重要工具是随机梯度下降&#xff08;SGD&#xff09;分类器。通过探索其功能和在数据驱动决策中的关键作用&#xff0c;我们开始探索SGD分类器的复杂性。 SGD分类器是一种与SGD回归器有着密切联系的灵活分类技术。它的工作原…

【网络安全】实验六(网络安全协议的应用SSL,Ipsec)

一、实验目的 二、搭配环境 打开两台虚拟机&#xff0c;并参照下图&#xff0c;搭建网络拓扑环境&#xff0c;要求两台虚拟机的IP地址要按照图中的标识进行设置&#xff0c;并根据搭建完成情况&#xff0c;勾选对应选项。同时&#xff0c;按照多选题中2-3题的要求完成相关环境…

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

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

RabbitMQ中常用的三种交换机【Fanout、Direct、Topic】

目录 1、引入 2、Fanout交换机 案例&#xff1a;利用SpringAMQP演示Fanout交换机的使用 3、Direct交换机 案例&#xff1a;利用SpringAMQP演示Direct交换机的使用 4、Topic交换机 案例&#xff1a;利用SpringAMQP演示Topic交换机的使用 1、引入 真实的生产环境都会经过e…

《python程序语言设计》2018版第5章第52题利用turtle绘制sin函数

这道题是送分题。因为循环方式已经写到很清楚&#xff0c;大家照抄就可以了。 但是如果说光照抄可是会有问题。比如我们来演示一下。 import turtleturtle.penup() turtle.goto(-175, 50 * math.sin((-175 / 100 * 2 * math.pi))) turtle.pendown() for x in range(-175, 176…

Web3D+GIS完全免费的案例上线了

说明 - 人人奉献一点爱 - 让爱传递给更多的程序员 上传案例:将案例js放入到public目录下的cesiumExamples/threeExamples,然后在public/config目录对应的js录入的案例信息即可&#xff08;不打包&#xff09; 注: 先点星&#xff01;先点星&#xff01;先点星&#xff01;重要…

FC、NoF+、RoCE存储网络简介

全闪存时代背景下&#xff0c;传统的 FC存储网络 &#xff08;Fibre Channel&#xff0c;网状通道&#xff09;已经无法满足全闪存数据中心的要求&#xff0c; NVMe存储协议 &#xff08;Non-Volatile Memory express&#xff0c;非易失性内存主机控制器接口规范&#xff09;的…

爱了!8款超好用的PC端办公软件!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 你电脑中用的最久的软件是哪些&#xff1f;以下是否有你曾经使用过的软件呢&#xff1f;工欲善其事&#xff0c;必先利其器&#xff0c;今天继续…

排序 -- 计数排序以及对排序的总结

到了这篇文章就说明常见的排序我们就快要讲完了&#xff0c;那这篇文章我们就讲一下非比较排序--计数排序。 一、非比较排序 1.基本思想 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。 操作步骤&#xff1a; 统计相同元素出现次数 根据统计的结果将序列…

SAP_MM模块-特殊业务场景下的系统实现方案

一、业务背景 目前公司有一种电商业务&#xff0c;卖的是备品配件&#xff0c;是公司先跟供应商采购&#xff0c;然后再销售给客户&#xff0c;系统账就是按照正常业务来流转&#xff0c;公司进行采购订单入库&#xff0c;然后销售订单出库。 不过这种备品配件&#xff0c;实…

win7系统快速安装python

下载安装包 建议选择python3.8左右的&#xff0c;我下载的是3.7.8&#xff0c;最新版本的pythonwin7可能不支持 python网址 下拉寻找 安装python 1.双击安装包 更换完地址选择安装(install) 安装完成后点击close即可 测试是否安装成功 1.winr快捷键打开黑窗口输入cmd …

【大模型LLM面试合集】大语言模型基础_LLM为什么Decoder only架构

LLM为什么Decoder only架构 为什么现在的LLM都是Decoder only的架构&#xff1f; LLM 是 “Large Language Model” 的简写&#xff0c;目前一般指百亿参数以上的语言模型&#xff0c; 主要面向文本生成任务。跟小尺度模型&#xff08;10亿或以内量级&#xff09;的“百花齐放”…

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. 基于…

nature methods | 11种空间转录组学技术的系统性比较

—DOI: 10.1038/s41592-024-02325-3 Systematic comparison of sequencing-based spatial transcriptomic methods 学习了一下空间转录组技术怎么做benchmark&#xff0c;从多个的角度去考虑目前技术的性能&#xff0c;受益良多。但该研究缺少对10X Visium HD的测评&#xff…

智能交通(3)——Learning Phase Competition for Traffic Signal Control

论文分享 https://dl.acm.org/doi/pdf/10.1145/3357384.3357900https://dl.acm.org/doi/pdf/10.1145/3357384.3357900 论文代码 https://github.com/gjzheng93/frap-pubhttps://github.com/gjzheng93/frap-pub 摘要 越来越多可用的城市数据和先进的学习技术使人们能够提…

封装了一个仿照抖音效果的iOS评论弹窗

需求背景 开发一个类似抖音评论弹窗交互效果的弹窗&#xff0c;支持滑动消失&#xff0c; 滑动查看评论 效果如下图 思路 创建一个视图&#xff0c;该视图上面放置一个tableView, 该视图上添加一个滑动手势&#xff0c;同时设置代理&#xff0c;实现代理方法 (BOOL)gestur…

LabVIEW的Actor Framework (AF) 结构介绍

LabVIEW的Actor Framework (AF) 是一种高级架构&#xff0c;用于开发并发、可扩展和模块化的应用程序。通过面向对象编程&#xff08;OOP&#xff09;和消息传递机制&#xff0c;AF结构实现了高效的任务管理和数据处理。其主要特点包括并发执行、动态可扩展性和强大的错误处理能…

程序员熬夜看欧洲杯被“冻住”,呼吸困难……

2024欧洲杯接近尾声&#xff0c;更是激发球迷兴趣。由于时差关系&#xff0c;很多球迷熬夜看球&#xff0c;啤酒、宵夜成了标配。然而&#xff0c;在这份欢乐背后&#xff0c;也隐藏着健康风险。 日前&#xff0c;浙江杭州29岁的程序员单先生熬夜与朋友看完球赛后开车回家&…

MATLAB制作一个简单的函数绘制APP

制作一个函数绘制APP&#xff0c;输入函数以及左右端点&#xff0c;绘制出函数图像。 编写回调函数&#xff1a; 结果&#xff1a;