【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.mzph.cn/web/41397.shtml

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

相关文章

Halcon 产品周围缺口检测

*读取一张图像read_image (Image, 原图.jpg)*获取图像大小get_image_size(Image, Width, Height)*关闭已经打开的窗口dev_close_window ()*打开新窗口dev_open_window(0, 0, Width, Height, black, WindowHandle) //打开指定大小的窗口*对图像进行阈值操作threshold (Image, R…

【链表】【双指针】1、合并两个有序链表+2、分隔链表+3、删除链表的倒数第N个结点+4、链表的中间结点+5、合并两个链表

3道中等2道简单 数组和字符串打算告一段落&#xff0c;正好最近做的几乎都是双指针&#xff0c;所以今天做链表&#xff01; 1、合并两个有序链表&#xff08;难度&#xff1a;简单&#xff09; 该题对应力扣网址 AC代码 思路简单 /*** Definition for singly-linked list.…

万和day01代码分析

将了数据库的多表之间的操作&#xff0c;实际应用到JDBC中去。 一共五张表&#xff0c; info存储的是具体的信息&#xff0c;edu job role 和info都是多对一的关系。 采用的是Java FX&#xff0c;界面采用xml去编写。 项目理解一 在JavaFX中&#xff0c;ObservableList 是一个…

SCI一区TOP|准随机分形搜索算法(QRFS)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;LA Beltran受到分形几何、低差异序列启发&#xff0c;提出了准随机分形搜索算法&#xff08;Quasi-random Fractal Search, QRFS&#xff09;。 2.算法原理 2.1算法思…

【网络安全】实验三(基于Windows部署CA)

一、配置环境 打开两台虚拟机&#xff0c;并参照下图&#xff0c;搭建网络拓扑环境&#xff0c;要求两台虚拟的IP地址要按照图中的标识进行设置&#xff0c;并根据搭建完成情况&#xff0c;勾选对应选项。注&#xff1a;此处的学号本人学号的最后两位数字&#xff0c;1学号100…

Linux 搭建 Kafka 环境 - 详细教程

目录 一. Kafka介绍 1. 应用场景 2. 版本对比 二. Kafka安装 1. 前置环境 &#xff08;1&#xff09;安装JDK 2. 软件安装 &#xff08;3&#xff09;环境变量配置 &#xff08;3&#xff09;服务启动 三. Console测试 基础命令 &#xff08;1&#xff09;列出Kafk…

上网监控软件有哪些?3款实力出众的上网监控软件

为什么需要上网监控软件&#xff1f; 据说&#xff0c;99%的员工上班都会摸鱼&#xff0c;1%的员工上班会窃取公司信息。 所以&#xff0c;因此&#xff0c;监控员工的上网行为是很有必要滴。 总结下来&#xff0c;上网监控软件的作用是&#xff1a; 1.提高生产力&#xff1…

前端位置布局汇总

HTML中脱离文档流的元素有&#xff1a; position: absolute - 元素相对于最近的已定位&#xff08;非 static&#xff09;祖先元素定位。 position: fixed - 元素相对于浏览器窗口定位。 float: left 或 float: right - 元素向左或向右浮动&#xff0c;周围的内容会环绕它。 …

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

IDEA发疯导致maven下载回来的jar不完整zip END header not found

IDEA发疯导致maven下载回来的jar不完整zip END header not found 具体报错 java: 读取D:\mavenRepository\com\alibaba\druid-spring-boot-starter\1.2.23\druid-spring-boot-starter-1.2.23.jar时出错; zip END header not foundjava: java.lang.RuntimeException: java.io.…

2024 JuniorCryptCTF reppc 部分wp

Random cipher 文本编辑器打开附件 比较简单。脚本 Mutated Caesar 文本编辑器打开附件 比较简单。脚本 Pizza 附件拖入dnSpy 比较简单。脚本 l33t Leet&#xff0c;又称黑客语&#xff0c;是指一种发源于欧美地区的BBS、线上游戏和黑客社群所使用的文字书写方式&#xff0c;通…

Linux:进程终止和进程替换

Linux&#xff1a;Linux&#xff1a;进程终止和进程替换 一、进程终止1.1 进程退出场景和创建退出方式 1.2 exit 和 _exit区别二、进程程序替换2.1 进程替换函数2.2 函数解释及命名解释函数解释命名解释 2.3 单进程程序替换&#xff08;无子进程&#xff09;2.3.1 带l函数进程替…

买的Google账号登录,修改辅助邮箱收不到验证码?可能是个简单的错误

这篇文章分享一个案例&#xff0c;购买了谷歌账号以后如何修改辅助邮箱&#xff0c;修改辅助邮箱的一些要点&#xff0c;以及常见的一个错误。 一、案例回放 这个朋友昨天在我的一个视频下面留言说买了谷歌账号以后&#xff0c;想修改辅助邮箱地址&#xff0c;但是输入了辅助…

【WebRTC实现点对点视频通话】

介绍 WebRTC (Web Real-Time Communications) 是一个实时通讯技术&#xff0c;也是实时音视频技术的标准和框架。简单来说WebRTC是一个集大成的实时音视频技术集&#xff0c;包含了各种客户端api、音视频编/解码lib、流媒体传输协议、回声消除、安全传输等。对于开发者来说可以…

Unity3D游戏 RPG

丛林探险游戏 人物进行探险游戏 拥有登录&#xff0c;首页&#xff0c;3D物体旋转浏览的功能&#xff0c;还能进行种植树等功能

【matlab 路径规划】基于改进遗传粒子群算法的药店配送路径优化

一 背景介绍 本文分享的是一个基于订单合并的订单分配和路径规划联合优化&#xff0c;主要背景是骑手根据客户需求&#xff0c;从药店取药之后进行配送&#xff0c;配送的过程中考虑路径的长度、客户的服务时间窗、车辆的固定成本等要素&#xff0c;经过建模和优化得到最优的配…

C# WinForm —— 38 SplitContainer介绍

1. 简介 将页面拆分成两个大小可以调整的区域&#xff0c;中间有一个拆分条&#xff0c;可以拖动拆分条来调整左右区域的大小 2. 属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到BoderStyle边框样式&#xff1a;None、FixedSingle、Fixed3DAutoScroll当控件…

C++ 引用做函数返回值

作用&#xff1a;引用是可以作为函数的返回值存在的 注意&#xff1a;不要返回局部变量引用 用法&#xff1a;函数调用作为左值 示例&#xff1a; 运行结果&#xff1a;

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

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

零基础STM32单片机编程入门(九)IIC总线详解及EEPROM实战含源码视频

文章目录 一.概要二.IIC总线基本概念1.总体特征2.通讯流程 三.EEPROM介绍1.M24C08基本介绍2.向M24C08写一个字节时序图3.从M24C08读一个字节时序图 四.GPIO模拟IIC驱动M24C08读写五.CubeMX工程源代码下载六.讲解视频链接地址七.小结 一.概要 IIC(Inter&#xff0d;Integrated …