Java学习手册:String&StringBuffer&StringBuilder&StringTokenizer

java选择题 1.正确配置path环境变量的方式是:( ) A在系统环境变量path原有的字符串基础上,加上分号“;”,然后再加上JDK安装路径下的bin目录 B新建系统环境变量path,其值为:分号“;”,然后再连上JDK安装路径下的bin目录 C在系统环境变量path原有的字符串基础上,加上分号“;”,然后再加上JDK安装路径下的lib目录 D新建系统环境变量path,其值为:分号“;”,然后再连上JDK安装路径下的lib目录 A 2.正确配置classpath环境变量的方式是:( )。 A在系统环 阅读详情

Java语言有4个类可以对字符或字符串进行操作,它们分别是Character、String、StringBuffer和StringTokenizer,其中Character用于单个字符操作,String用于字符串操作,属于不可变类,而StringBuffer也是用于字符串操作,不同之处是StringBuffer属于可变类。


一、String类的常用方法

char charAt(int index)//查看当前字符串给定位置的字符
int length()//返回当前字符串的字符数量
int indexOf(String str)//查看给定字符串在当前字符串中的位置。若有,则返回给定字符串的第一个字符在当前字符串中的下标位置,若没有则返回-1
int lastIndexOf(String str)//查看给定字符串在当前字符串中最后一次出现的位置
//注:Java API通常使用2个数字表示范围的时候,都是含头不含尾
String subString(int start, int end)//截取字符串(含头不含尾)
String subString(int start)//从给定位置开始一直截取到字符串末尾
String trim()//去除当前字符串两边的空白
boolean startsWith(String str)//判断当前字符串是否以给定的字符串起始
boolean endsWith(String str)//判断当前字符串是否以给定的字符串结尾
String toUpperCase()//将当前字符串的英文部分转换为全大写
String toLowerCase()//将当前字符串的英文部分转换为全小写
static String valueOf()//该方法用若干重载,用于将其他类型转换为字符串

二、StringBuffer

StringBuffer,缓冲区,本身也是字符串,但是与String不同,StringBuffer是可以更改的,StringBuffer是一个操作类,所以必须通过实例化进行操作。

StringBuffer类的常用的方法:

append(char c)
insert()
replace()
indexOf()
delete(int start,int end)
deleteCharAt(int index)
setCharAt(int index,char ch)
reverse()

三、String与StringBuffer

String是不可变类,也就是说,String对象一旦被创建,其值将不能被改变,而StringBuffer是可变类,当对象被创建后仍然可以对其值进行修改。由于String是不可变类,因此适合在需要被共享的场合使用,而当一个字符串经常需要被修改时,最好使用StringBuffer来实现。如果用String来保存一个经常被修改的字符串时,在字符串被修改时会比StringBuffer多很多附加的操作,同时生成很多无用的对象,由于这些无用的对象会被垃圾回收器回收,因此会影响程序的性能。

String与StringBuffer的另外一个区别在于当实例化String时,可以利用构造函数(String s = new String(“Hello”);)的方式来对其进行初始化,也可以用赋值(String s = “Hello”;)的方式来初始化,而StringBuffer只能使用构造函数(StringBuffer s = new StringBuffer(“Hello”);)的方式来初始化。

StringBuffer类和String类的对比:
(1)String类表示的字符串是常量,一旦创建后,内容和长度都是无法改变的。而StringBuffer表示字符容器,其内容和长度可以随时修改。在操作字符串时,如果该字符串仅用于表示数据类型,则使用String类即可。但是如果需要对字符串中的字符进行增删操作,则使用StringBuffer类。
(2)String类覆盖了Object类的equals()方法,而StringBuffer类没有覆盖Object类的equals()方法。
(3)String类对象可以用操作符“+”进行连接,而StringBuffer类对象之间不能。

String字符串修改实现的原理如下:当用String类型来对字符串进行修改时,其实现方法是首先创建一个StringBuffer,其次调用StringBuffer的append()方法,最后调用StringBuffer的toString()方法把结果返回。

String s = "Hello";
s += "World";//1
//代码1等价于如下代码①②③:
StringBuffer sb = new StringBuffer(s);//①
s.append("World");//②
s = sb.toString();//③

四、StringBuilder

StringBuilder是一个可变的字符序列,该类被设计用作StringBuffer的一个简易替换。用在字符串缓冲区被单个线程使用的时候,建议优先考虑该类,速度比StringBuffer要快。但是如果设计到线程安全方面,建议使用StringBuffer。

StringBuilder类的常用方法:

//StringBuilder内部维护一个可变的字符数组,该类用于修改字符串
toString()//获取内部表示的字符串
append(String str)//向当前字符串末尾追加给定字符串内容,返回值就是当前String Builder对象
insert(int dstOffset, String s)//插入字符串
delete(int start, int end)//删除字符串
replace(int start, int end, String str)//替换字符串
reverse()//反转字符串

五、StringBuffer与StringBuilder

——StringBuffer是线程安全的,同步处理的,性能稍慢。
——StringBuilder是非线程安全的,并发处理的,性能稍快。

线程安全会带来额外的系统开销,所以StringBuilder的效率比StringBuffer高。

StringBuilder也是可以被修改的字符串,它与StringBuffer类似,都是字符串缓冲区,但StringBuilder不是线程安全的,如果只是在单线程中使用字符串缓冲区,那么StringBuilder的效率会更高。因此在只有单线程访问时可以使用StringBuilder,当有多个线程访问时,最好使用线程安全的StringBuffer。因为StringBuffer必要时可以对这些方法进行同步,所以任意实例上的所有操作就好像是以串行发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。


六、String、StringBuffer与StringBuilder

在执行效率方面,StringBuilder最高,StringBuffer次之,String最低。因此,一般而言,如果要操作的数据量比较小,应优先使用String类;如果是在单线程下操作大量数据,应优先使用StringBuider类;如果是在多线程下操作大量数据,应优先考虑StringBuffer类。


七、StringTokenizer

StringTokenizer是用来分割字符串的工具类,示例如下:

package com.haobi;

import java.util.StringTokenizer;

/*
 * StringTokenizer示例
 */
public class Test {
	public static void main(String[] args) {
		StringTokenizer st = new StringTokenizer("Hello World !");
		while(st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}
	}
}
//程序输出结果如下:
Hello
World
!

全网首发!Yolov8_obb旋转框训练、测试、推理手把手教学(DOTA1.0数据集map50已达80%) 其中,images/train和images/val放置原始图片文件,labels/train_original和labels/val_original分别放置原始的标签文件,labels/train和labels/val为空,然后运行步骤(3)的代码,运行结束转换后的标签会保存在labels/train和labels/val中,格式如下。(4)新建yolov8-obb.yaml,修改nc和scales,我使用的是yolov8n.(2)构建数据集,安装下面目录格式,其他test可为空,一定要对应。 阅读详情

相关推荐

炸金花游戏(3)--基于EV(期望收益)的简单AI模型

前言:   炸金花这款游戏, 从技术的角度来说, 比德州差了很多. 所以他的AI模型也相对简单一些. 本文从EV(期望收益)的角度, 来尝试构建一个简单的炸金花AI. 相关文章:  德州扑克AI--Programming Poker AI(译).  系列文章说来惭愧, 之前一直叫嚷着写德州AI, 不过可惜懒癌晚期, 一直没去实践, T_T. 相比而言,***简单很多, 也更偏重于运...

weixin_30377461的博客 2342

【Java】Scanner类处理大量输入数据时,效率低下的解决方案

在线评测系统(OJ)在进行 ACM模式的题目测试时(牛客、蓝桥杯等),都需要自己进行数据的输入输出。在这种模式下,通常都是使用Scanner类读取标准输入和System.out来进行结果的输出。但是当输入数据量非常大时,即使你的算法完全正确且已经是最优解法了,由于Scanner类的效率问题,仍然会导致程序超时而通过不了(题目卡测试用例)。

StuLearn-LJC的博客 1363

当windows安装git时出现以下错误提示

Windows安装Git时出现多个系统配置设置失败错误(exit code 4294967295),提示包括无法设置textconv、LFS过滤器和SSL等配置项。关键问题在于scalar.exe版本不兼容,系统提示"该版本的scalar.exe与你运行的Windows版本不兼容"。解决方案是检查程序版本是否正确,下载与Windows系统兼容的正确版本重新安装即可。

沧澜的博客 1875

String框架的核心与运用

引入:传统的项目运行需要借助servlet,但是过程却是非常复杂的(需要配置Tomcat,部署前端代码等等)。这时我们引入了Spring框架,学习框架相当于从“小作坊到工厂的升级,操作更加高效和简单。Spring:是Spring Framework(Spring框架)(Spring是一个生态体系,其中包含了Spring Framework、Spring Boot、Spring cloud等等。我们一般常说的Spring框架指的是Spring Framework),是包含了众多工具方法的。

m0_53975470的博客 552

Unity抖音小游戏上架实战:从零到一,详解流程与避坑指南

本文详细介绍了Unity抖音小游戏上架的全流程,包括环境准备、SDK集成、开发者账号注册、软著申请、打包提交流程及常见问题解决方案。重点解析了抖音小游戏平台特有的配置细节和避坑技巧,帮助开发者高效完成游戏上架并优化用户体验。

weixin_33704234的博客 261

西门子 标准程序解读---> 机器手抓取和涂胶控制程序

摘要 该程序实现机械手在OP70/OP90工位的自动化控制,核心功能包括: 流程控制:分段(Seg1-Seg11)管理抓件、涂胶、放件等动作,结合DB1050/DB1250数据块监控工位状态及变位机位置反馈。 安全机制:配置干涉区(FC124)、实时检测安全光/急停信号,防止碰撞;服务程序(FB191)支持维修位触发与安全隔离。 参数配置:通过DB块关联机器人速度、节拍(FB27)、车型编码(如空过=2)及手自动模式(DB70.DBX21.2)。 应用场景:适用于汽车焊接/装配线

工控智联驿站 1239

120道java最常问面试题!

点击上方关注 “终端研发部”设为“星标”,和你一起掌握更多数据库知识不积跬步无以至千里,下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目...

这个时代,作为程序员可能要学习小程序 1万+

基于FISCO BCOS 部署可升级的 Solidity存证智能合约

本文介绍了基于FISCOBCOS平台的可升级Solidity存证智能合约实现方案。采用透明代理模式,包含逻辑合约、代理合约和管理合约三部分,支持业务逻辑升级而不影响存储数据。详细阐述了合约架构设计、Solidity代码实现、Go SDK交互流程以及完整的部署升级步骤。方案具有数据持久性、版本兼容性和生产就绪等特点,提供了权限控制、输入验证等安全机制,并包含监控管理工具。该实现为企业级区块链存证应用提供了可靠的基础架构,支持后续功能扩展和定制化开发。

分享AI、区块链技术及应用,未来已来 1515

你只会用 split?试试 StringTokenizer,性能可以快 4 倍!!

我们都知道,分割字符串要使用 String 的 split() 方法,split 方法虽然深入人心,使用也简单,但效率太低! 其实在 JDK 中,还有一个性能很强的纯字符串分割工具类:StringTokenizer。 这个类在 JDK 1.0 中就推出来了,但在实际工作却发现很少有人使用,网上有人说不建议使用了,甚至还有人说已经废弃了,真的是这样吗? StringTokenizer 被废弃了吗? 栈长翻阅了一些资料,原来在 Oracle JDK 官方文档中已经有了描述,这是最新的 Oracle JDK 15

Java技术栈,分享最主流的Java技术 697

qq对接openclaw,通过qq发送命令

把 OpenClaw 接入 QQ 和微信,目前主流的微信文章和教程主要提供了两种截然不同的路径。我为你梳理了它们的核心区别和关键步骤,你可以根据自己的需求来选择。

suny8的专栏 270

ABB机器人刷功能选项全一篇就够——不怕丢失程序和IO配置数据

ABB机器人刷功能选项

m0_66701835的博客 1260

ViPT~

这里防止阶段感知MCP,以充分利用不同模态语义理解。直接将提示加入基础模型中间层特征也使本文ViPT算法快速且简单地应用在已有的预训练基础跟踪器中。与包含可训练地提示学习网络和预测头的提示调整方法不同,本文ViPT中所有RGB模态相关网络参数全部冻结,包括补丁嵌入,特征提取交互和预测头。whaosoft aiot http://143ai.com VisEvent是目前最大的视觉-事件基准数据集,本文在320各测试视频上进行比较。本文仅使用由原始事件数据变换来的事件图像。图5给出了相关实验结果。ViPT

whaosoft143ai的博客 581

飞牛NAS1.1.19更新后SSH连不上?两步快速恢复连接

飞牛NAS1.1.19版本更新后SSH无法连接😟,实则是官方安全策略升级默认关闭了该服务,本文分享两步实操配置恢复SSH连接💻,还同步了官方的设备安全配置建议,帮助用户兼顾使用与设备防护🔒。

XiaoqiangClub的博客 2105

Java 代码优化:为什么有人说 StringTokenizer 会比String.split() 的效率高呢?他测试了吗?

当在对字符串进行分割操作的时候,最熟悉的估计就是split()方法了,但是,有的老铁却说尽量不要使用split(),推荐使用StringTokenizer 这个类的效率会好点,不知道老铁,哪来的结论? 下面是我对这个问题的测试。 下面是测试代码: private static final String TTM = "0|probeName_lxk|188.188.8.11...

请叫我大师兄 2235

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

那些年让我蹚浑水的java基础

“”和equals方法究竟有什么区别? “”操作符专门用来比较两个变量的值是否相等,即比较变量对应的内存中所存储的数值是否相同,用于比较两个基本类型或两个引用变量的值是否相等。 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如Object obj = new Object();引用变量obj占用一块内存,new O...

Doris的博客 318

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

字符串处理StringTokenizer

原文链接:https://blog.youkuaiyun.com/daicooper/article/details/80788596 在 Java 类库的 java.util 包中包含一个用于进行字符串词法分析的类 StringTokenizer ,目的是将对字符串进行分解的方法进行封装,以简化应用程序设计过程中的工作量。例如,对于字符串 “We are Students “, 如果把空格作为该字符串的分隔符,那么该字符串有3个单词;而对于字符串 “You,are,Student”,如果把逗号作为了该字符串的分隔.

xinyu100100的博客 599

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

可变字符串(StringBuffer和StringBuilder)

StringBuilder类是JDK5中新加的类,和StringBuffer之间的区别在于:StringBuilder的方法是线程不安全的,即StringBuffer不能被同步访问,而StringBuilderr可以同步访问。StringBuilder类的常见操作和StringBuffer类似,可以参考上面的StringBuffer类。2.String类重写了Object类的equals()方法,而StringBuffer类和StringBuilder类都没有重写Object类的equals()方法。

qq_51768153的博客 1514

String的substring、split, StringTokenizer 截取字符串性能比较

测试的软件环境为:Windows XP、eclipse、JDK1.6。 测试用例使用类ip形式的字符串,即3位一组,使用”.”间隔。数据分别使用:5组、10组、100组、1000组、10000组、100000组。 实现 闲话不说,先上代码: package test.java.lang.ref; import java.util.Random; import java.util

山的那边 1万+

StringTokenizer和split分隔字符串效率比较

实验1: public class TestCharacter { private static String buildString(int length) {         StringBuilder sb = new StringBuilder();         Random r =new Random();         for (int i = 0; i      

huangzheng122的博客 3702

java字符串分解 StringTokenizer用法(比split()方法效率高)

Java中substring方法可以分解字符串,返回的是原字符串的一个子字符串。如果要讲一个字符串分解为一个一个的单词或者标记,StringTokenizer可以帮你。 int countTokens():返回nextToken方法被调用的次数。boolean hasMoreTokens():返回是否还有分隔符。boolean hasMoreElements():返回是否还有分隔符。String...

weixin_34122810的博客 215

StringTokenizer和Split性能比较

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34370347的博客 263

改进JAVA字符串分解的方法

一、概述   大多数Java程序员都曾经使用过java.util.StringTokenizer类。它是一个很方便的字符串分解器,主要用来根据分隔符把字符串分割成标记(Token),然后按照请求返回各个标记。这个过程称为Tokenization,实际上就是把字符序列转换成应用程序能够理解的多个标记。   虽然StringTokenizer用起来很方便,但它的功能却很有限。这个类只是简单地在输入字符

★★★★★ 知知为知知,不知为不知,是知也! ★★★★★ 1601

java java中subString、split、stringTokenizer三种截取字符串方法的性能比较

面试的时候,string  基本上是bi

u013938165的专栏 2531

Java基础笔试练习(七)

1.下列程序执行后结果为( )? class A { public int func1(int a, int b) { return a - b; } } class B extends A { public int func1(int a, int b) { return a + b; } } public class ChildC...

Coder编程的博客 3064

操作字符串有哪些?string和stringBuilder的效率对比

string和stringBuilder的效率对比? 答:用字符串的拼接来看,stringBuilder可以直接拼接,而String类型如果要字符串拼接,每次都会生成一个新的String类型,在进行拼接,String拼接既浪费内存(空间)又浪费时间,效率很低,所以两者相比stringBuilder效率更高,有兴趣可以去看看JAVA底层是怎样写这两个东西的。 ...

ZMB0001的博客 396
上一篇: Java学习手册:实例化String对象
下一篇: Java学习手册:Java中复制数组的方法
浩比浩比
博客等级 码龄12年 395粉丝 202原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值