startsWith(String prefix,int toffset)源码分析
startsWith(String prefix)是String类的一个方法
String类代表字符串。Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现。
/*** str.startsWith(prefix,toffset)* 测试此字符串str从指定序列开始,是否是以指定字符串(前缀)开始* @param prefix 指定前缀* @param toffset 指定序列* @return*/
public boolean startsWith(String prefix, int toffset)
基于jdk1.7,String类的startsWith(String prefix,int toffset)方法源码分析:
public boolean startsWith(String prefix, int toffset) {// 被比较的字符串(str),转化为char数组char ta[] = value;// 指定索引位置int to = toffset;// 比较的字符串(指定前缀)转化为char 数组,char pa[] = prefix.value;int po = 0;// 指定前缀字符数组的长度int pc = prefix.value.length;// Note: toffset might be near -1>>>1.// 如果指定索引小于0或者指定索引位置大于目标字符数组的长度与指定前缀字符数组的长度,返回false;if ((toffset < 0) || (toffset > value.length - pc)) {return false;}// 循环比较pc次,即指定前缀字符数组的长度//循环比较字符数组(ta[](从索引位置比较)和pa[](全部比较))的字符是否一一相等while (--pc >= 0) {// 若相对应的字符有一个不相等,则返回falseif (ta[to++] != pa[po++]) {return false;}}//全部相等,返回truereturn true;}
toffset > value.length - pc
toffest:表示指定索引
value.length :表示被比较字符串数组(str)的长度
pc:比较字符串数组(prefix)的长度
toffset > value.length - pc 即 toffset + pc > value.length
当指定索引大于两数组的差值时,指定前缀遍历不完,则说明一定不满足条件。返回false;
如果参数表示的字符序列是此对象(str)从索引(toffset)处开始的子字符串,则返回true,否则为false。
测试代码:
public static void main(String[] args) {String str = "hello,world";boolean b1 = str.startsWith("hello", 0);System.out.println(b1);System.out.println("-------------------");boolean b2 = str.startsWith("el");System.out.println(b2);System.out.println("-------------------");boolean b3 = str.startsWith("el", 1);System.out.println(b3);System.out.println("-------------------");}
运行结果:
结果分析:
boolean b1 = str.startsWith("hello", 0);
从0号位置比较,prefix.value.length长度的字符一一相等,返回为true;
boolean b2 = str.startsWith("el");
默认从0号位置比较,prefix.value.length长度的字符不相等,返回为false;
boolean b3 = str.startsWith("el", 1);
相比上一条语句,从1号位置比较,prefix.value.length长度的字符一一相等,返回为true;
startsWith(String prefix,int toffset)源码分析相关推荐
- Android研发中对String的思考(源码分析)
1.常用创建方式思考: String text = "this is a test text "; 上面这一句话实际上是执行了三件事 1.声明变量 String text; 2. ...
- getResource(String name)用法及源码分析
Project获取资源需要一个启点,加载资源的动作是由ClassLoader来完成的.Class对象和当前线程对象可以找到当前加载资源的ClassLoader,通过ClassLoader的getRes ...
- java string is empty_从源码分析java.lang.String.isEmpty()
今天在写代码的时候用到了java.lang.String.isEmpty()的这个方法,之前也用过,今天突发奇想,就看了看源码,了解了解它的实现方法,总结出来,大家可以交流交流. 通常情况下,我们使用 ...
- 【Java源码分析】String 方法 startsWith
startsWith() startsWith() 方法用于检测字符串是否以指定的前缀开始. 语法 public boolean startsWith(String prefix, int toffs ...
- 【Java源码分析】String 检测 startsWith
目录 startsWith() 语法 参数 返回值 实例 源码 startsWith() startsWith() 方法用于检测字符串是否以指定的前缀开始. 语法 public boolean sta ...
- startsWith源码分析
在Java编程中,我们有时会遇到判断当前字符串是否会以另外的字符串开始.此时我们就会用到startsWith来检测某字符串是否以另一个字符串开始,返回值为boolean类型. 目标 本次源码分析的目标 ...
- String常用方法大全(深入源码层面分析)
1 构造方法类型 String(String original):把字符串数据封装成字符串对象 String(char[] value):把字符数组的数据封装成字符串对象 String(char[] ...
- Java-- String源码分析
本篇博文基于java8,主要探讨java中的String源码. 首先,将一个类分为几个部分,分别是类定义(继承,实现接口等),全局变量,方法,内部类等等,再分别对这几个部分进行说明,这样到最后类的全貌 ...
- DialogFragment源码分析
2019独角兽企业重金招聘Python工程师标准>>> 目录介绍 1.最简单的使用方法 1.1 官方建议 1.2 最简单的使用方法 1.3 DialogFragment做屏幕适配 2 ...
最新文章
- 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)
- loglevel python 不输出_Python 通过 Celery 框架实现分布式任务队列!
- RabbitMq集群使用Nginx做负载均衡
- Go语言 XML生成和解析
- JavaScript中的全局变量介绍
- linux安装程序乱码,linux远程桌面乱码解决及引起的相关问题、字库安装
- 亲测可用,超详细RabbitMQ消息队列集群配置
- python进程的状态及创建
- 京东向上海提供超1600万件米面粮油等民生商品
- 4KB/2MB/1GB 4级/5级分页模式下的线性地址翻译以及CR3
- 用python编写一个汉诺塔的移动函数_关于python递归函数实现汉诺塔
- android列表项点击事件,Android 开发 tips(2):监听 Listview 列表项点击事件
- 干货整理!10个Python图像处理工具,入门必看,提效大法 | 资源
- 51Nod-1009 数字1的数量【数位DP+记忆化搜索】
- 完美.PCK文件不完全详解
- win10声音输出设备选择声卡步骤
- Qt-命令行更新翻译.ts文件
- 使用DNSLog进行盲打
- 【网络安全工程师面试合集】—社会工程学到底是什么?
- Android TextView设置跑马灯效果
热门文章
- 关于“带头大哥”关闭博客的思考
- HCIE-Cloud Computing LAB备考第二步:实战解题--第一题:FusionCompute--扩容CNA与对接共享存储
- jQuery事件机制
- SSL加速和证书卸载的配置方式
- C:\Program Files\Git\cmd\git.EXE ls-remote -h -t https://github.com/nhn/raphael.git
- css 边框环绕动态效果
- php yii框架路由,yii框架的路由在哪里看
- HTML5视频与音频
- Java实现视频,音频转码
- 安装openslide和clam的小记录