字符串篇
1.1 认识字符串:
字符串的本质是字符(char)类型数组,在java中则将字符串视为String类的一个实例,也就是程序中的对象。
1.2 String类
由字符所组成的一串文字和符号被称做字符串。例如Hello这个字符串是由H、e、l、l、o这5个字符所组成。在java中字符串不仅仅是字符数组,而且是String 类的一个实例。可以使用String类构造。可以使用下面的方式声明一个字符串的引用名称,并指向一个字符串实例。
String text=”Hello”;
System.out.println(text);
注意:字符串的直接指定必须用””括起来,字符串的每个字符都是使用Unicode字符构造的。在构造一个字符串对象之后,可以在输出(out)中指定字符串对象的引用名称来输出字符串。
字符串的连接在java中使用”+”运算符号,+号本来是加法运算符号,而它被重写(override)可以 直接用于字符串的连接。例如:
String msg=”你好”;
msg =msg+”java”;
System.out.println(msg)
字符串在java中是以String 类的一个实例存在的。每个字符串本身会有几个可操作的方法。
方法 说明
length() 返回字符串的字符长度
equals() 判断原字符串的字符是否等于指定字符串中的字符
toLowerCase() 转换字符串的英文字符为小写
toUpperCase() 转换字符串的英文字符为大写
如果要将输入的字符串转换为整数,浮点数等数据类型,可以使用下面所提供的静态的方法。
方法 说明
Byte.parseByte(String) 把字符串转换为字节
Short.parseShort(String) 把字符串转换为short整数
Integer.parseInt(String) 把字符串转换为 int整数
Long.parseLong(String) 把字符串转换为 long 整数
Float.parseFloat(String) 把字符串转换为 Float 浮点数
Double.parseFloat(String) 把字符串转换为 Double 浮点数
如果指定的字符串无法转换为数据类型的值,则会发出NumberFormatException异常(格式转换异常)。
String str=”abc”;
这样声明看起来像基本数据类型的声明。但String 类并不是 java的基本数据类型。String 类是java.lang下所提供的类。如果以配置对象的角度来声明字符串。如下:
String str=new String(“hello”);
由于字符串的本质是字符数组。所以使用String 类声明字符串。该字符串具有数组索引的性质。
方法 说明
char charAt(int index) 返回指定索引处的字符
int indexOf(int ch) 返回指定字符第一个找到的索引位置
int indexOf(String str) 返回指定字符串第一个找到的索引位置
int lastIndexOf(int ch) 返回指定字符最后一个找到的索引位置
String substring(int beginIndex) 取出指定索引处至字符串尾端的子字符串
String substring(int beginIndex,int endIndex) 取出指定索引范围的子字符串
Char[] toCharArray() 将字符串转换成字符数组
在构造字符串对象时,除了直接在=后使用”” 来指定字符串常数。也可以使用字符数组来构造。例如:
Char[] name={‘H’,’e’,’l’,’l’,’o’};
String str=new String(name);
除了上面介绍的几个方法,还有很多。这里就不一一总结了。应该学会使用API。例如String类还有个endsWith()方法可以判断字符串是不是以指定的字符做为结尾,可以使用这个方法来过滤文件名称
public class FileFilter
{
public static void main(String [] args)
{
String [] filename=
{"bush.jpg","aa.jpg","file.gif","bb.gif"};
System.out.println("过滤jpg文件");
for(int i=0;i<filename.length;i++)
{
if(filename.endsWith("jpg"))
{
System.out.print(filename+" ");
}
}
}
}
1. 3 不可变字符串
在java 中使用字符串最重要的一个规则必须记住,一个字符串对象一旦被创建,它的内容就是固定不变的
String str=”Hello”;
这个声明会创建一个长度为5,内容为Hello的字符串对象,您无法改变这个字符串对象的内容。
String str=”ni”;
str = “nihao”;
不要以为这样就改变了字符串对象的内容
事实上。上面那段代码中产生了两个字符串对象,一个是ni字符串对象,长度为2;一个是nihao字符串对象,长度为5,两个不同的字符串对象。您不不是在ni 字符串后面加上hao字符串,而是让str 引用名称从新引用nihao字符串,而不在引用ni 字符串但ni字符串在内存中还是存在的,只是现在没有被引用。
str(引用名称) → ni
使用=重新指定
→ ni
str(引用名称)→ nihao
java中,使用”=”将 一个字符串对象指定给一个引用名称,其意义是:改变该名称所引用的对象,原来被引用的字符串对象若没有被其他名称引用,就会在适当的时候被Java的垃圾回收机制回收
在java执行时会维护一个String池(pool).对于一些可以共享的字符串对象,会先在String 池查找是否存在相同String 内容(字符相同)。如果有就直接返回,而不是直接创建一个新String 对象,可以减少内存的消耗。如下:
String str1=”Hello”;
String str2=”Hello”;
System.out.println(str1==str2);
返回true;
上面这段代码实质上是指向同一个字符串对象
str1→Hello
str2→Hello
*注意:声明字符串的方式必须是 引用名称=”字符串对象” ,该字符串就会放在String池
中
在java中如果==被使用于两个引用名称时,它是用于比较两个引用名称是否指向同一个对象。
在来看看关于String 的 intern() 方法。来看下API怎么说的:在intern()方法被调用时,如果池中已经存在相同的String 对象(即内容相同),那么会返回池中的字符串对象。如果不存在,调用intern()方法的字符串对象被加入池中,并返回该对象的引用。
String str1=”fly”;
String str2=”weight”;
String str3=”flyweight”;
String str4=null;
str4=str1+str2;
System.out.println(str3==str4);
str4=(str1+str2).intern();
System.out.println(str3==str4);
来分析下上面的代码:在java使用+连接字符串会产生一个新的字符串对象,所以第一次在比较str3==str4结果为false,因为它们引用不同的对象
str1→fly;
str2→weight
str3→flyweight;
str4→flyweight;
使用intern() 方法时会先检查String 池 是否存在字符部分相同字符串对象。如果有就返回,由于intern() 在 String 池 找到了它,所以直接返回。这时候在比较 str3和str4 指向同一个字符串对象。所以结果会是true.
由上面例子也得出一个结论那就是。在java中使用==是比较两个引用名称是否引用同一个对象.不可以用==来比较两个字符串对象的内容是否相同
例如:
String str1=new String(“hello”);
String str2=new String(“hello”);
System.out.println(str1==str2);
结果:false
虽然两个字符串的内容相同。但是产生两个String 实例.str1和str2分别引用不同的实例。所以使用==比较结果会显示false;如果要比较两个字符串对象的内容是否相同,要使用equals()方法
如下:
String str1=new String(“hello”);
String str2=new String(“hello”);
System.out.println(str1.equals(str2));
结果:true
还有一个常见的问题:上面代码产生几个实例?很多人会回答2个,但答案是3个。因为hello 就是一个,它存在于字符串池中。另外2个分别 new 构造出来的String类型对象,分别由str1与 str2 引用,所以总共是3个 String 实例
1. 4 StringBuilder 类
一个String 对象的长度是固定的,不能改变它的内同或者是附加新的字符到String 对象中。您也许会使用+来连接字符串达到附加新字符或字符串的目的。但会产生一个新String 实例。如果程序对这种附加字符串的需求很频繁,会消耗很大资源。
在J2SE 5.0提供StringBuilder 类 ,使用这个类所产生的对象默认会有16字符的长度。您也可以自定初始长度。如果附加的字符超出可容纳的长度,则StringBuilder对象会自动增加长度以容纳被附加的字符。如果有频繁的字符附加的需求,使用StringBuilder会让程序的效率大大提高。
分享到:
相关推荐
数学建模学习资料 神经网络算法 参考资料-Matlab 共26页.pptx
happybirthday2 升级版生日祝福密码0000(7).zip
本项目是一个基于SSM框架的税务门户网站实现,结合了Vue技术,旨在提供一个全面的税务信息管理平台。该项目主要功能包括税务信息查询、税务申报、税务政策浏览及用户管理等多个模块。通过这些功能,用户可以方便地查询和管理税务相关的各类信息,同时也能及时了解最新的税务政策和规定。 项目采用SSM框架,即Spring、Spring MVC和MyBatis,这三者的结合为项目提供了强大的后端支持,确保了数据的安全性和系统的稳定性。前端则采用Vue.js框架,以其高效的数据绑定和组件化开发模式,提升了用户界面的响应速度和用户体验。 开发此项目的目的不仅是为了满足计算机相关专业学生在毕业设计中的实际需求,更是为了帮助Java学习者通过实战练习,深入理解并掌握SSM框架的应用,从而在实际工作中能够更好地运用这些技术。
php7.4.33镜像7z压缩包
本项目是一个基于Java的珠宝购物网站系统,采用SSM框架进行开发,旨在为计算机相关专业学生提供一个实践平台,同时也适合Java学习者进行实战练习。项目的核心功能涵盖商品展示、用户注册登录、购物车管理、订单处理和支付系统等。通过这一系统,用户可以浏览各类珠宝商品,包括详细的商品描述、高清图片和价格信息,同时能够方便地添加商品至购物车,并进行结算和支付操作。 在技术实现方面,项目运用了Spring、Spring MVC和MyBatis三大框架,确保系统的稳定性和扩展性。Spring负责业务逻辑层,提供依赖注入和面向切面编程的支持;Spring MVC则处理Web层的请求和响应,实现MVC设计模式;MyBatis作为持久层框架,简化了数据库操作。 此外,项目采用JSP技术进行前端页面展示,结合HTML、CSS和JavaScript等技术,为用户提供友好的交互界面。
基于java的高校大学生党建系统设计与实现.docx
本项目是一个基于Python-Django框架开发的疫情数据可视化分析系统,旨在为计算机相关专业的学生提供一个实践平台,同时也适用于需要进行项目实战练习的同学。项目集成了疫情数据的收集、处理、分析和可视化功能,为用户提供了一个直观、高效的数据分析环境。 在功能方面,系统能够自动抓取最新的疫情数据,包括确诊、疑似、治愈和死亡人数等关键指标。数据处理模块则负责清洗和整理这些数据,以确保分析的准确性。分析模块采用了多种统计方法和机器学习算法,以揭示疫情的发展趋势和潜在模式。可视化模块则通过图表和地图等形式,直观地展示了分析结果,便于用户理解和分享。 项目的开发框架选择了Django,这是一个高级Python Web框架,它鼓励快速开发和清晰、务实的设计。Django的强大功能和灵活性,使得项目能够快速响应需求变化,同时保证了系统的稳定性和安全性。
果树领养计划.docx
环境说明:开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat 开发软件:eclipse/myeclipse/idea Maven包:Maven 浏览器:谷歌浏览器。 项目均可完美运行 基于Java的云平台信息安全攻防实训平台提供了以下核心功能: 1. **实训课程与项目**:平台提供了丰富多样的实训课程和项目,覆盖网络安全基础知识、漏洞挖掘与利用、渗透测试技术、安全防护策略等多个领域。 2. **在线学习模块**:学员可以通过在线学习模块观看教学视频、阅读文档资料,系统地学习信息安全知识。 3. **虚拟实验室环境**:平台提供虚拟实验室环境,学员可以在模拟的真实网络场景中进行攻防演练,包括漏洞扫描、攻击测试和防御措施的学习。 4. **教学管理功能**:教师可以创建和管理课程内容,制定教学计划,布置实训作业和考试任务。 5. **监控和统计功能**:教师可以实时了解学员的学习进度、实践操作情况和考试成绩,进行有针对性的指导和辅导。 6. **平台管理功能**:管理员负责用户管理、资源分配、系统安全维护等,确保平台稳定运行和实训环境的安全性。 7. **实时监控和评估**:系统具备实时监控和评估功能,能够及时反馈学生的操作情况和学习效果。 8. **用户认证和授权机制**:平台采用了严格的用户认证和授权机制,确保数据的安全性和保密性。 这些功能共同构建了一个功能丰富、操作便捷的实训环境,旨在提升学员的信息安全技能,为信息安全领域的发展输送专业人才。
基于GrampusFramework的轻量级单体RBAC权限管理系统
内容概要:本文档全面整理了软考(中级-软件设计师)的关键知识点,涵盖了计算复杂度、网络协议、数据结构、编程语言、数据库理论、软件测试、编译原理、设计模式、安全协议等多个方面的内容。具体涉及环路复杂度计算、SSH协议、数据字典与数据流图、对象的状态与数字签名、编程语言分类、海明码、著作权法、物理层与数据链路层设备、归纳法与演绎法、模块间耦合、能力成熟度模型集成、配置管理与风险管理、数据库关系范式、内存技术、计算机网络端口、路由协议、排序算法、中间代码、软件测试类型、编译器各阶段任务、设计模式、耦合与内聚、计算机病毒种类等。 适用人群:备考软考(中级-软件设计师)的技术人员,尤其是有一定工作经验但希望进一步提升自身技能和知识的IT从业人员。 使用场景及目标:帮助考生系统梳理考试重点,理解和掌握软件设计师应具备的专业知识和技术。适合考前复习和巩固基础知识。文档还可以作为参考资料,用于日常工作中遇到相关问题时查阅。 其他说明:本文档不仅提供了丰富的知识点,还附带了一些关键术语的定义和详细的解释,确保读者能够全面理解相关内容。建议在复习过程中结合实际案例进行练习,加深理解。
数学建模学习资料 神经网络算法 Hopfield网络 共58页.pptx
工作寻(JobHunter)是一款招聘信息整合的网站,目前固定的模板有拉勾网,中华英才网,前程无忧。工作寻可以在线通过关
本项目是基于Python实现的协同过滤音乐推荐系统,旨在为计算机相关专业学生提供一个完整的毕设实战案例。项目以协同过滤算法为核心,通过分析用户历史行为数据,为用户推荐符合其兴趣偏好的音乐。 主要功能包括用户兴趣建模、音乐推荐生成以及用户反馈机制。系统能够实时捕捉用户听歌行为,动态更新用户兴趣模型,从而更精准地推送个性化音乐推荐。同时,系统设计了友好的用户界面,使用户能够方便地获取推荐音乐,并通过反馈机制不断完善推荐算法。 在技术框架方面,项目采用了Python编程语言,借助scikit-learn等机器学习库实现协同过滤算法,并结合Flask框架搭建了Web服务,确保了系统的性能和稳定性。此项目的开发,不仅能够帮助学生深入理解协同过滤算法及音乐推荐系统的工作原理,还能提升其软件开发和项目管理能力。
微型餐饮补正备案材料通知书.docx
食品生产许可质量跟踪监督建议书.docx
基于django的音乐推荐系统.zip
如果让某人推荐Python技术书,请让他看这个列表很棒的 Python 书籍如果让某人推荐Python技术书,请让他看这个列表前言好的技术书籍可以帮助我们快速成长,大部分人新生儿或者少部分受益于经典的技术书籍。在「Python开发者」微信公号后台,我们经常能收到帮忙推荐书籍的消息。此类问题在@Python开发者微博和伯乐在线的Python小组讨论中也绝非耳熟能详。 7月3日,伯乐在线在「Python开发者」微信公号发起了一个讨论(注PC端无法看到大家的评论,需要关注微信公号后,从微信公号才可以看到),通过这个讨论话题,在评论中分享对自己有帮助的大量Python技术书籍。 (Python开发者)入门《Head First Python》+入门级+微信49票+豆瓣评分9.5推荐语**66**浅显易懂,编排的顺序特别,有大量插图、对话,感觉枯燥古心通熟易懂,大量の图片,不会觉得枯燥,是一本不错的入门书《集体智慧编程》+入门级+微信123票+豆瓣评分 9.0推荐语**Mèrçurý**以实例具体的方式来展示Python的编程技巧,受益良多《Py
基于java的博客系统设计与实现.docx
建设工程基本建设程序检查表.docx