Java——String类的方法

Java——String类的方法

String str1 = “abc” 与String str2 = new String(“abc”)有什么区别?

  • 字符串常量存储在字符串常量池,目的是共享
  • 字符串非常量对象存储在堆中
    在这里插入图片描述

String的常用方法

常用方法1:

  • int length():返回字符串的长度return value.length
String str = "abcdefghijklmn";
System.out.println(str.length());
/*输出结果:14*/
  • char charAt(int index):返回某索引处的字符return value[index]
String str = "abcdefghijklmn";
System.out.println(str.charAt(13));
/*输出结果:n*/
  • boolean isEmpty():判断是否是空字符串return value.length == 0
String str = "abcdefghijklmn";
System.out.println(str.isEmpty());
/*输出结果:false*/
/*为空返回true,不为空返回false*/
  • String toLowerCase():使用默认语言环境,将String中的所有字符转换成小写
String str = "AbcdefghijklmN";
System.out.println(str.toLowerCase());
/*输出结果:abcdefghijklmn*/
  • String toUpperCase():使用默认语言环境,将String中的所有字符转换成大写
String str = "AbcdefghijklmN";
System.out.println(str.toUpperCase());
/*输出结果:ABCDEFGHIJKLMN*/
  • String trim():返回字符串的副本,忽略前导空白和尾部空白(中间的空白不能忽略)
String str = "     AbcdefghijklmN     ";
System.out.println(str.trim());
/*输出结果:AbcdefghijklmN*/
  • boolean equals(Object obj):比较字符串的内容是否相同
String str = "AbcdefghijklmN";
System.out.println(str.equals("abcdefghijklmN"));
/*输出结果:false*/
  • boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
String str = "AbcdefghijklmN";
System.out.println(str.equalsIgnoreCase("abcdefghijklmN"));
/*输出结果:true*/
  • String concat(String str):将指定字符串连接到此字符串的结尾。等价于“+”
String str = "AbcdefghijklmN";
System.out.println(str.concat("abcdefghijklmN"));
/*输出结果:AbcdefghijklmNabcdefghijklmN*/
  • int compareTo(String anotherString):比较两个字符串的大小
String str = "Ac";
System.out.println(str.compareTo("Ab"));
/*输出结果:1*/String str = "Ab";
System.out.println(str.compareTo("Ab"));
/*输出结果:0*/String str = "Ab";
System.out.println(str.compareTo("Ad"));
/*输出结果:-2*/
  • String substring(int beginIndex):返回一个新的字符串,它是此字符串从deginIndex开始到最后一个字符结束的一个子字符串
String str = "abcdefghijklmN";
System.out.println(str.substring(2));
/*输出结果:cdefghijklmN*/
  • String substring(int beginIndex,int endIndex):返回一个新的字符串,它是此字符串的从begin开始,截取到endIndex(不包含)的一个子字符串
String str = "abcdefghijklmN";
System.out.println(str.substring(2,9));
/*输出结果:cdefghi
不包含str[9]
*/

常用方法2:

  • boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束
String str = "abcdefghijklmN";
System.out.println(str.endsWith("lmN"));
/*输出结果:true*/
  • boolean startsWith(String prefix):测试此字符串是否以指定的前缀结束
String str = "abcdefghijklmN";
System.out.println(str.startsWith("abb"));
/*输出结果:false*/
  • boolean startsWith(String prefix,int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始
String str = "abcdefghijklmN";
System.out.println(str.startsWith("de",3));
/*输出结果:true*/
  • boolean contains(CharSequence s):当且仅当此字符串包含指定的char值序列时,返回true
String str = "abcdefghijklmN";
System.out.println(str.contains("hi"));
/*输出结果:true*/
  • int indexOf(String str):返回指定子字符串在此字符串中第一次出现的索引,从指定的索引开始
String str = "lllllabcdeabcdeabcsde";
System.out.println(str.indexOf("abcs"));
/*输出结果:15*/
  • int lastIndexOf(String str):返回指定字符串在此字符串中最右边出现处的索引
String str = "abcdeabcdeabcde";
System.out.println(str.lastIndexOf("abcde"));
/*输出结果:10*/

常用方法3:

  • String replace(char oldChar,char newChar):返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的
String str = "abcd abcd abcd csdn csdn adcc";
System.out.println(str.replace("abcd", "csdn"));
/*输出结果:csdn csdn csdn csdn csdn adcc*/
  • String replaceAll(String regex,String replacement):使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串

  • boolean matches(String regex):告知此字符串是否匹配给定的正则表达式

  • String[] split(String regex):根据正则表达式的匹配拆分此字符串

  • String[] split(String regex,int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中

public static void main(String[] args){String s = "Hello";s += " World";System.out.println(s);
}

在这里插入图片描述


如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费内存空间,而这种操作还不可避免。如何解决这个问题???可以通过Java提供的StringBuilder类来解决。

StringBuilder和StringBuffer

StringBuilder是一个可变的字符串类,可以把它看成一个容器,这里的可变是指StringBuilder对象中的内容是可变的,可以对字符串内容进行增删,它做字符串拼接的时候是不会创建一个新的对象的

String的内容是不可变的
StringBuilder内容是可变的,StringBuffer内容是可变的在这里插入图片描述

StringBuffer常用的方法:

  • StringBuffer append(xxx):进行字符串拼接
StringBuffer bf = new StringBuffer("lll");
System.out.println(bf.append("sss"));
/*输出结果:lllsss*/
  • StringBuffer delete(int start,int end):删除指定位置的内容
StringBuffer bf = new StringBuffer("aaaasssscccc");
System.out.println(bf.delete(4, 8));
/*输出结果:aaaacccc
不包括bf[8]*/
  • StringBuffer replace(int start,int end,String str):把[start,end]位置替换为str
StringBuffer bf = new StringBuffer("aaaasssscccc");
System.out.println(bf.replace(4, 8, "bbbb"));
/*输出结果:aaaabbbbcccc*/StringBuffer bf = new StringBuffer("aaaasssscccc");
System.out.println(bf.replace(4, 8, "bb"));
/*输出结果:aaaabbcccc*/
  • StringBuffer insert(int offset,xxx):在指定位置插入xxx
  • StringBuffer reverse():把当前字符序列逆转

String字符串拼接、StringBuffer、StringBuilder三者效率测试

package string;public class StringDemo06 {public static void stringJoin() {long startTime = System.currentTimeMillis();String s = "";for(int i=0;i<10000;i++) {s = s + "Hello";s = s + "World";s = s + "Hello";}long endTime = System.currentTimeMillis();System.out.println("使用String进行字符串拼接用时(毫秒):"+(endTime - startTime));}public static void stringBufferJoin() {StringBuffer strBuffer = new StringBuffer("");long startTime = System.currentTimeMillis();for(int i=0;i<10000;i++) {strBuffer.append("Hello");strBuffer.append("World");strBuffer.append("Hello");}long endTime = System.currentTimeMillis();System.out.println("使用StringBuffer进行字符串拼接用时(毫秒):"+(endTime - startTime));}public static void stringBuilderJoin() {StringBuilder strBuilder = new StringBuilder();long startTime = System.currentTimeMillis();for(int i=0;i<10000;i++) {strBuilder.append("Hello");strBuilder.append("World");strBuilder.append("Hello");}long endTime = System.currentTimeMillis();System.out.println("使用StringBuilder进行字符串拼接用时(毫秒):"+(endTime - startTime));}public static void main(String[] args) {//String拼接字符串用时stringJoin();//StringBuffer拼接字符串用时stringBufferJoin();//StringBuilder拼接字符串用时stringBuilderJoin();}
}

运行结果:
在这里插入图片描述


总结:StringBuffer与StringBuilder的区别

  1. StringBuffer:可变字符序列、效率低、线程安全、多线程操作字符串缓冲区下操作大量数据用StringBuffer
  2. StringBuilder:可变字符序列、效率低、线程不安全、单线程操作字符串缓冲区下操作大量数据用StringBuilder

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

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

相关文章

OpenAI魔法模型DALL-E论文、代码公布!

来源&#xff1a;AI科技评论编译&#xff1a;AI科技评论OpenAI在1月5日公布DALL-E模型以来&#xff0c;人们都惊艳于模型的语言想象力是如此丰富和细致。如今&#xff0c;我们终于等到了论文的公布&#xff0c;从而得以了解DALL-E天马行空创造力背后的奥秘。值得一提的是&#…

Maven项目无法加载jdbc.properties

Maven项目无法加载jdbc.properties(java.sql.SQLException: The server time zone value ‘&#xfffd;й&#xfffd;&#xfffd;&#xfffd;׼ʱ&#xfffd;&#xfffd;’ is unrecog) 1.JdbcUtils.java package com.zxm.utils;import java.io.InputStream; import ja…

Hinton:我终于想明白大脑怎么工作了!神经学家花三十年,寻找反向传播的生物机制...

来源&#xff1a;智源社区作者&#xff1a;Anil Ananthaswamy编译&#xff1a;梦佳「有一天晚上&#xff0c;我回家吃饭&#xff0c;激动地说『我终于想明白大脑是怎么工作的了&#xff01;』我15岁的女儿对我说&#xff0c;怎么又来了&#xff0c;老爸。」 …

Mybatis学习笔记(一)——项目搭建、导入依赖、相关配置

Mybatis学习笔记&#xff08;一&#xff09;——项目搭建、导入依赖、相关配置 传送门&#xff1a;Mybatis中文网&#xff08;入门手册&#xff09;Mybatis中文网 一、新建项目 在项目中新建模块&#xff1a; 二、学习Mybatis常用的依赖&#xff1a; <dependencies…

数学与工业革命

来源&#xff1a;中科院数学与系统科学研究院作者&#xff1a;黄雷&#xff0c;中科院数学与系统科学研究院数学&#xff0c;无时无刻不散发着它独特的魅力。上到宇宙飞船遨游外太空&#xff0c;下至小商小贩行走菜市间&#xff0c;这门与每个人生活都息息相关的学科一直在默默…

AI回溯过去解决复杂任务 |《自然》论文

来源&#xff1a;Nature Portfolio根据《自然》本周发表的一项研究First return, then explore&#xff0c;一类增强学习算法在雅达利经典游戏中的得分超过了人类玩家和先进的人工智能系统&#xff0c;算法挑战的游戏包括《蒙特祖马的复仇》&#xff08;Montezuma’s Revenge&a…

python数据图形化—— matplotlib 基础应用

matplotlib是python中常用的数据图形化工具&#xff0c;用法跟matlab有点相似。调用简单&#xff0c;功能强大。在Windows下可以通过命令行 pip install matplotlib 来进行安装。 以下为一些基础使用的例子&#xff1a; 1、绘制直线 先通过numpy生成在直线 y 5 * x 5 上的一组…

Snipaste的安装及快捷键的设置

Snipaste的安装及快捷键的设置 关于Snipaste&#xff1a; Snipaste 是一个简单但强大的截图工具&#xff0c;也可以让你将截图贴回到屏幕上&#xff01;可以将剪贴板里的文字或者颜色信息转化为图片窗口&#xff0c;并且将它们进行缩放、旋转、翻转、设为半透明&#xff0c;甚…

人与机器人的交互理论及其前景

来源&#xff1a;人机认知与实验室摘要&#xff1a;移动机器人的人机交互正处于早期阶段。大部分与机器人相关的用户交互都被数控能力所限制&#xff0c;向用户提供的最普遍的界面是以自动化平台提供的视频和对机器人的一定程度上的路径指挥。对于半自动能力的移动机器人&#…

计算机组成原理——Cache与主存的地址映射

Cache–主存的地址映射 由主存地址映象到cache地址称为地址映射 cache的基本结构&#xff1a; Cache的工作过程&#xff1a; CPU发出一个地址&#xff0c;同时发给主存和cache的地址映射机构&#xff0c;CPU会从主存中取出字还是从cache中取出字&#xff0c;主存将块号送入主…

申工智能有没有作弊?

来源&#xff1a;北国骑士在2021年农心杯赛场&#xff0c;韩国天才棋手申真谞连胜五轮&#xff0c;帮助韩国队夺得了阔别很久的团队冠军奖杯。从一连串的棋局来看&#xff0c;不管是日本选手还是中国对手&#xff0c;在韩国棋手面前都“不堪一击”。以申真谞为例&#xff0c;几…

浮点数加减法运算(对阶、尾数求和、规格化、舍入、溢出判断)

浮点数的加减法运算 前言&#xff1a; 运算过程&#xff1a;对阶、尾数求和、规格化、舍入、溢出判断 浮点加减运算 在计算机中&#xff0c;加减法运算用补码实现。 算术运算的常识&#xff1a;两个浮点数如果要进行加减法运算&#xff0c;它们的阶或者指数必须相等。 一、…

JSP实现登陆页面(表单提交、连接数据库、实现页面跳转)

JSP实现登陆页面(表单提交、连接数据库、实现页面跳转) 1.数据库设计 2.主页面展示 3.代码展示&#xff1a; index.jsp <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html PUBLIC …

任正非在“GTS云与终端云合作与融合进展”汇报会上的讲话

任正非内部讲话音频版作者&#xff1a;任正非来源&#xff1a;蓝血研究&#xff08;lanxueyanjiu)2021年1月12日&#xff0c;任正非在“GTS云与终端云合作与融合进展”汇报会上发表讲话。任正非要求&#xff0c;要围绕着体验把端、管、云拉通&#xff0c;优化华为的GTS服务网络…

Hinton一作新论文:如何在神经网络中表示“部分-整体层次结构”?

来源 | AI科技评论作者 | Geoffrey Hinton编译 | 陈彩娴AI科技评论在 Twitter 上发现了一篇Hinton的新论文&#xff0c;作者只有Hinton本人&#xff0c;这篇论文没有介绍具体的算法&#xff0c;而是描绘了一个关于表示的宏观构想&#xff1a;如何在神经网络中表示部分-整体层次…

概率校准与Brier分数

1.再提逻辑回归 前面已经讲过了逻辑回归&#xff0c;这里不再细讲&#xff0c;只是简单的说一个函数&#xff0c;主要是方便大家更好的理解概率校准。 在逻辑回归中&#xff0c;用的最多的就是sigmod函数&#xff0c;这个函数的作用就是把无限大或者无限小的数据压缩到[0,1]之间…

费曼:所有科学知识都是不确定的

来源 &#xff1a; 网络作为科学家&#xff0c;我们知道伟大的进展都源于承认无知&#xff0c;源于思想的自由。那么这是我们的责任——宣扬思想自由的价值&#xff0c;教育人们不要惧怕质疑而应该欢迎它、讨论它&#xff0c;而且毫不妥协地坚持拥有这种自由——这是我们对未来…

遍历性能

iOS开发中数组常用的五种遍历方式 随着iOS的不断发展&#xff0c;apple也不断推出性能更高的数组遍历方式&#xff0c;下面将对熟悉的五种遍历方式进行列举。 首先定义一个数组&#xff0c;并获取数组长度 一、for循环 二、forin 快速枚举 三、NSEnumerator 四、快速遍历 五、快…

【剑指offer】面试题68 - I:二叉树的最近公共祖先(Java)

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它自…

工业传感器:工业互联网的第一道门

来源&#xff1a;北京物联网智能技术应用协会作者&#xff1a;刘沁沈阳仪表科学研究院副总工程师、传感器国家工程研究中心常务副主任工业的发展离不开众多感知技术的加持&#xff0c;其中最为关键的技术之一便是传感器。可以说&#xff0c;工业传感器让自动化智能设备有了感知…