一起来了解一下Java中的String类吧!!!

news2024/11/16 13:47:59

简单认识Java中的String类

一、认识String类的重要性

在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提
供的字符串系列函数完成大部分操作,但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想,而字
符串应用又非常广泛,因此Java语言专门提供了String类。

所以在这里,博主提一下,Java中的String是一种引用数据类型,并不是像int、char、float等这种基础数据类型。!!!

(1)字符串""这个事物,Java中也是一个对象,对象的描述类,java.lang.String,提供很多方法操作字符串。

(2) 使用频率非常高:身高,年龄,学历,工作经历,婚姻状况,人生目标。

(3)学会学好String类,提供操作方法,方法必须要熟练。


二、字符串的构造

第一种:

String str1 = "hello"; 这种是最简洁的表达方式,注意str1中存放的是该字符串的地址.

第二种:

String str2 = new String(“world”);

第三种:

char[] chars = {'j','a','v','a'};

String str3 = new String(chars);

总结:(1)这三种方式创建字符串都是一样的,在对象中存储字符串的地址.

(2)java中的字符串不像C语言中末尾还有‘/0’存在

字符串在内存中存储的样子(这里先不管常量池的问题):

在这里插入图片描述


三、关于字符串中常用的操作

1、String对象的比较

Demo:

String str1 = new String("hello");
String str2 = new String("world");
System.out.println(str1.equals(str2));


//代码运行的结果为:false

这是因为,new的对象的地址不一样,而equals没有重写之前是根据对象的地址去判断是否一样,所以这里输出为false.

System.out.println(str1.equalsIngnoreCase(str2));此语句是忽略字符串的大小去比较.

2、比较两字符串的大小

Demo:

       String s1 = new String("hello");
       String s2 = new String("world");
       int ret = s1.compareTo(s2);
       if(ret>0) {
           System.out.println("s1>s2");
       }else if(ret<0) {
           System.out.println("s1<s2");
       }else {
           System.out.println("s1=s2");
       }


//运行结果为:s1<s2

关于compareTo函数,这个函数是用来比较两个字符串的大小,从第一个字符开始,根据ascll码值比较,返回一个整数compareToIngnoreCase函数是忽略大小写进行比较.

3、字符串查找

(1)根据下标来找元素

Demo:

       String str = "abcdef";
       for(int i = 0;i<str.length();i++) {
           char ch = str.charAt(i);//chatAt函数是返回下标为i的字符
           System.out.print(ch );
       }


//这里输出的结果为a b c d e f

(2)找某个字符在字符串中的下标

String str = "abcdef";
System.out.print(str.indexOf('c') );

//2

此函数是找到目标字符,并返回目标字符的下标。但是如果目标字符有多个相同的字符,就会返回第一个字符的下标.

String str = "abcdefcc";
System.out.print(str.indexOf('c',3) );

//6

从下标为3的位置开始找

(3)在字符串中找字符串

Demo:

String str = "abcdefcc";
System.out.print(str.indexOf("abc"));

//0

返回最先找到的那串字符串的第一个字符的下标.

String str = "abcdefabc";
System.out.print(str.indexOf("abc",3));

//6

从下标位置为3的字符开始找字符串.

(4)从后往前找字符

Demo:

String str = "abcdef";
System.out.print(str.lastIndexOf('c'));

//2

此函数作用为从后往前找目标字符,返回下标.

String str = "abcdcefc";
System.out.print(str.lastIndexOf('c',5));

//4

从下标为5的位置从后往前开始找,找到返回下标.

(5)从后往前找字符串

Demo:

String str = "abcdcefabcfsdfabc";
System.out.print(str.lastIndexOf("abc"));

//14

从后往前开始找字符串,找到返回此字符串的首字符下标.

String str = "abcdcefabcfsdfabc";
System.out.print(str.lastIndexOf("abc",12));

//7

从下标为12的位置开始找字符串,找到返回此字符串的首字符下标.

4、类型之间的转化

(1)数值和字符串转化

该情况使用valueOf函数,后面可以跟任何数据类型,比如int、char、boolean、甚至是一个类等等都是可以的.

String str = String.valueOf(1234);

String str = String.valueOf(new Integer(1234));

(2)字符串转成其他数据类型

这种情况使用各种数据类型的包装类中的方法,如parseInt()、parseDouble()等

double num2 = Double.parseDouble("3.14");

int num1 = Integer.parseInt("1234");

(3)大小写之间的转化

Demo:

//小写-->大写
        String str1 = "hello";
        String ret1 = str1.toUpperCase();
        System.out.println(ret1);

//大写-->小写
        String str2 = "HELLO";
        String ret2 = str2.toLowerCase();
        System.out.println(ret2);

/*
HELLO
hello
*/

(4)字符串转数组

Demo:

String str = "abcdefg";
char[] chars = str.toCharArray();
System.out.println(Arrays.toString(chars));

//[a, b, c, d, e, f, g]

toCharArray()函数是将字符串变成数组类型,Arrays.toString()函数就是以数组的形式输出.

(5)字符串替换

此函数并不是在原函数上替换,而是返回新的字符串Demo:

        String str = "ababcbacabcdef";
        String ret = str.replace('a','q');//将字符串里面的所有'a'换成'q'
        System.out.println(ret);

        String ret2 = str.replace("ab","wz");//将字符串中的"ab"换成"wz"
        System.out.println(ret2);

        String ret3 = str.replaceAll("abc","mnpl");//将字符串中所有的"abc"换成"mnpl"
        System.out.println(ret3);
        
        String ret4 = str.replaceFirst("abc","uuuu");//将字符串中第一个"abc"换成"uuuu"
        System.out.println(ret4)
            
            
/*
qbqbcbqcqbcdef
wzwzcbacwzcdef
abmnplbacmnpldef
abuuuubacabcdef
*/

(6)字符串拆分

Demo:

String str = "zhangsan&wangwu";
String[] ret = str.split("&");
System.out.println(Arrays.toString(ret));

//[zhangsan, wangwu]

split函数是通过括号里面的字符将字符串进行拆分,返回的也是一个字符串数组.

String[] ret = str.split("&",2);可以进行组数的限制,这样就是分为两组

特殊的拆分:

Demo:

        String str = "127.00.0.1";
        String[] ret = str.split("\\.");
        for(String x:ret) {
            System.out.println(x);
        }

两个“\\”相当于一个“\”,然后“\”和“.”才是一个真正的“.”号.

注:

  • 字符“\”,”*”,”+”都得加上一个转义字符,前面加上“\\”
  • 如果要按照“\”分的话,就写成”\\\\“
  • 如果一个字符串中有多个分隔符,可用“|”作为连接符
    • str.split("= | &");

(7)字符串的拆分

Demo:

        String str = "helloworld!";
        String ret1 = str.substring(1);//从下标为1的位置开始截取
        System.out.println(ret1);

        String ret2 = str.substring(1,4);//从下标为1的位置开始,取到下标为4的位置,左闭右开
        System.out.println(ret2);

/*
elloworld!
ell
*/

(8)字符串中的trim函数

Demo:

        String str = "  hello hello  ";
        String ret = str.trim();
        System.out.println(ret);

//hello hello

trim函数是去除字符串左右两边的空格,中间的空格不会被去除


四、StringBuffer和StringBuilder

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类,这两个也是类,也可以表示字符串.

1、String、StringBuffer、StringBuilder的区别

  • String类的对象创建了之后,内容就不可以修改,而StringBuffer和StringBuilder的对象创建了之后内容可以修改
  • StringBuffer和StringBuilder大部分的功能相似
  • StringBuffer采用同步处理,是线程安全的
  • StringBuilder未采用同步处理,不是线程安全的

2、关于String对象创建了之后,内容不能改变的原因

这是因为源码中String类中有一个byte[]数组,这个数组被final修饰,所以数组一旦创建就不可以被修改,并且被final修饰的引用一旦指向某个对象之后,不可再指向其他对象.

注意:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:

  • String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
  • StringBuilder变为String: 调用toString()方法。

3、常用方法

方法说明
StringBuff append(String str)在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、double、float、int、long、Object、String、StringBuff的变量
char charAt(int index)获取index位置的字符
int length()获取字符串的长度
int capacity()获取底层保存字符串空间总的大小
void ensureCapacity(int mininmumCapacity)扩容
void setCharAt(int index,char ch)将index位置的字符设置为ch
int indexOf(String str)返回str第一次出现的位置
int indexOf(String str, int fromIndex)从fromIndex位置开始查找str第一次出现的位置
int lastIndexOf(String str)返回最后一次出现str的位置
int lastIndexOf(String str,int fromIndex)从fromIndex位置开始找str最后一次出现的位置
StringBuff insert(int offset, String str)在offset位置插入:八种基类类型 & String类型 & Object类型数据
StringBuffer deleteCharAt(int index)删除index位置字符
StringBuffer delete(int start, int end)删除[start, end)区间内的字符
StringBuffer replace(int start, int end, String str)将[start, end)位置的字符替换为str
String substring(int start)从start开始一直到末尾的字符以String的方式返回
String substring(int start,int end)将[start, end)范围内的字符以String的方式返回
StringBuffer reverse()反转字符串
String toString()将所有字符按照String的方式返回

由于这些方法较多,博主就不在这里一一演示了,大家可以自己下去敲敲哦。


好啦,本期的博客带各位小伙伴们简单认识了String类,如果各位小伙伴还有不懂的问题或者文章有错误的地方,请后台私信告诉博主!!!

路再远也会有终点,夜再长也会有尽头,雨再大也会有停的时候。
在这里插入图片描述

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

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

相关文章

vcruntime140_1.dll缺失了要怎么修复?多种方法助你解决丢失问题

我们在使用电脑的时候&#xff0c;其实最经常发生的事情就是蓝屏和dll文件缺失了吧&#xff0c;这也是很多网友最想解决的几个大问题。今天呢&#xff0c;就是有一个网友反映说他的vcruntime140_1.dll缺失了&#xff0c;不知道怎么解决&#xff0c;下面我们就来聊聊vcruntime14…

QT DAY4

做一个闹钟&#xff0c;并播报填写内容 widget.h 文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QDateTime> #include <QMessageBox> #include<QTextToSpeech> //文本转语音类namespace Ui…

你的流量虚了吗?分析手机流量卡不足量的套路

当今时代&#xff0c;手机流量的使用是每个人每天都在消耗的事情&#xff0c;在有WIFI的情况下还好&#xff0c;大家不需要担心流量用多了还是少了&#xff0c;但是在使用手机流量的时候&#xff0c;就需要注意了&#xff0c;看看是不是会用超什么的&#xff0c;但是现在有一个…

最新总结的软件测试宝典,花2天时间阅完,软件测试面试就过了......

1、测试人员需要何时参加需求分析&#xff1f; 如果条件循序 原则上来说 是越早介入需求分析越好 因为测试人员对需求理解越深刻 对测试工作的开展越有利 可以尽早的确定测试思路 减少与开发人员的交互 减少对需求理解上的偏差 2、软件测试与调试的关系 测试条件已知&#x…

uniapp Android平台各功能模块隐私合规协议

Android平台各功能模块隐私合规协议

STM32 Proteus仿真HCSR04超声波测距报警DS18B20温度采集 -0055

STM32 Proteus仿真HCSR04超声波测距报警DS18B20温度采集 -0055 Proteus仿真小实验&#xff1a; STM32 Proteus仿真HCSR04超声波测距报警DS18B20温度采集 -0055 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 LCD1602显示器HCSR04超声波测距传感器DS18B20温度传感器…

数学建模常用模型(六):时间序列预测

数学建模常用模型&#xff08;六&#xff09;&#xff1a;时间序列预测 时间序列预测是数学建模中的一个重要领域&#xff0c;用于预测时间序列数据中未来的趋势和模式。时间序列预测可以帮助我们了解数据的演变规律&#xff0c;做出合理的决策和规划。 这是我自己总结的一些代…

FCPX插件-16个手绘卡通素描涂鸦图形文字标题动画 Scribble Sketch Lower Thirds

Scribble Sketch Lower Thirds包含16个手绘卡通素描涂鸦图形文字标题动画模板&#xff0c;一个简约的卡通标题动画&#xff0c;由手绘的文本动画组成&#xff0c;可帮助您轻松改善您影片创意。 这个插件包提供了各种独特的手绘风格的标题动画模板&#xff0c;包括涂鸦笔画、草…

最新FLstudio21.0.3中文版本下载更新及内容介绍

在现在这个数字音乐时代&#xff0c;各种音乐中都或多或少有些电子音乐的影子&#xff0c;或是合成器音色、或是通过数字效果器制作出的变幻莫测的变化效果。而小马丁、Brooks、Eliminate等众多电子音乐巨头便是使用FL Studio来制作音乐的。今天小编就以FL Studio五年的资深用户…

你尚未连接--代理服务器可能有问题,或地址不正确。

这种情况可能是你装了梯子之后&#xff0c;自动开启了代理服务器 解决方法&#xff1a; 1、控制面板->网络和Internet 2、网络和共享中心->internet选项 3、连接->局域网设置 4、把代理服务器的沟沟取消 这样就解决了

多线程与并发编程【线程休眠、线程让步、线程联合、判断线程是否存活】(二)-全面详解(学习总结---从入门到深化)

目录 线程休眠 线程让步 线程联合 Thread类中的其他常用方法 判断线程是否存活 线程的优先级 线程休眠 sleep()方法&#xff1a;可以让正在运行的线程进入阻塞状态&#xff0c;直到休眠时间 满了&#xff0c;进入就绪状态。sleep方法的参数为休眠的毫秒数。 public class…

数据库常见4种范式

数据库范式 1. 数据库范式1.1 第一范式&#xff08;1NF&#xff09;1.2 第二范式&#xff08;2NF&#xff09;1.3 第三范式&#xff08;3NF&#xff09;1.4 巴斯科德范式&#xff08;BCNF&#xff09;1.5 范式的优缺点1.5.1 优点1.5.2 缺点 1. 数据库范式 在关系型数据库中&…

LabVIEW开发汽车安全带张紧测试

LabVIEW开发汽车安全带张紧测试 安全带是车辆乘员安全的主要约束系统&#xff0c;通过遮挡乘员与仪表板或挡风玻璃等接触&#xff0c;显着防止致命或非致命伤害。安全带的实践在三十年内将死亡率降低到相当可观的水平&#xff0c;并且直到今天仍然是许多国家的强制性。 然而&…

基于物理机部署前后端分离项目

软件安装 安装git 安装mysql 安装redis 安装python 安装虚拟环境 安装uwsgi 安装nginx centos安装常见软件_骑台风走的博客-CSDN博客一 卸载mysql### 1 查看mysql的安装情况 rpm -qa |grep -i mysql # -i表示忽略大小写 mysql80-community-release-el7-7.noarch mysql-commun…

如何用 Github Pages 免费部署静态站点

最低成本部署静态网站 所谓静态网站&#xff0c;是指它所有内容都是静态的&#xff0c;即预先编写好并存储在服务器上&#xff0c;访问者获取到的是事先准备好的静态文件。 所以完全不需要购买服务器&#xff0c;除了域名之外&#xff0c;几乎不会有其他花销。 我在构建五个静…

3.7.cuda运行时API-使用cuda核函数加速warpaffine

目录 前言1. warpAffine2. warpAffine案例2.1 导言2.2 main函数2.3 warpaffine_to_center_align函数2.4 warp_affine_bilinear函数2.5 warp_affine_bilinear_kernel核函数2.6 AffineMatrix结构体 3. 补充知识总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0…

【Linux后端服务器开发】软硬链接与动静态库

目录 一、软硬链接 二、动静态库 1. 静态库 2. 动态库 一、软硬链接 软链接&#xff1a;ln -s myfile soft_file.link 硬链接&#xff1a;ln myfile hard_file.link 查看映射关系&#xff1a;ll -li 软硬链接区别&#xff1a;是否具有独立的inode 软链接具有独立的inode…

Appium+python自动化(一)- 环境搭建—上(超详解)

最近整理了一下自动化的东西&#xff0c;先前整理的python接口自动化已经接近尾声。即将要开启新的征程和篇章&#xff08;Appium&python&#xff09;。那么首相的问题就是搭建环境了。好久没搭建环境又踩了不少坑&#xff0c;appium的环境搭建比较繁琐&#xff0c;好多同行…

零撸X2E大热门​Salad Venture的空投!

Salad Venture 随着Web3的走红&#xff0c;X to Earn成为热门概念&#xff0c;其中X可指运动、购物、游戏、学习和创作等诸多应用场景&#xff0c;Earn则是通过这些特定场景产生经济收益。与Web2企业将利益分配权牢牢掌握在自己手中不同&#xff0c;X to Earn的本质是将参与者…

Coggle 30 Days of ML(23年7月)任务七:训练TextCNN模型

Coggle 30 Days of ML&#xff08;23年7月&#xff09;任务七&#xff1a;训练TextCNN模型 任务七&#xff1a;使用Word2Vec词向量&#xff0c;搭建TextCNN模型进行训练和预测 说明&#xff1a;在这个任务中&#xff0c;你将使用Word2Vec词向量&#xff0c;搭建TextCNN模型进…