Java之一文详解String字符串的用法|微头条
本文将给大家重点讲解一下String的用法,因为这个太常用,也太常考了。String字符串的内容是比较多的,需要
String是Java里的一个类,属于引用类型,遵循引用类型的基本规律和要求。但它也有自己的一些特点,比如可以直接用双引号"......"来表示一个字符串,所以凡是用双引号括起来的一串字符都是String对象,如“Hello”在编译后就会成为一个String对象。
(相关资料图)
而且String是final类,一旦创建了一个String对象,理论上就不能再被改变,当然我们可以使用其他变量重新赋值的方式进行更改。
另外从名字上我们也可以猜测出,字符串与字符有一定的关系。实际上,String字符串的内部是通过一个private final char[]数组
来实现数据存储的,所以我们可以通过如下方式来表示一个字符串:
String str = new String(new char[] {"H", "e", "l", "l", "o", "y", "y", "g"});
当然,以上这种字符串的表达方式太过麻烦,而且由于String太常用了,所以Java就提供了"......"这种极简的表达方式供我们使用。
我们要知道,Java字符串的一个重要特点就是字符串的不可变性。这种不可变主要是通过final修饰String类,private final char[]
字段对数据的存储,且没有提供任何可以修改char[]字段的方法来实现的。
壹哥之前给大家讲过java里的8种基本数据类型,我们知道,其中有一种比较特殊的char字符类型,可以在单引号中存储单个的字符元素,比如"A"、"9"、"国" 等。而我们今天要学习的String类,则是用双引号"..."来表达字符串的。作为初学者,我们一定要注意字符与字符串的区别:
字符只能表示单个字符元素,必须用单引号""把单个的字符元素括起来,如"A"、"9"、"国" 等;字符串可以表示单个或多个字符元素,必须用双引号把单个或多个字符元素括起来,如"A"、"Hi"、"中国"等;字符是基本类型,其本质是一种数值;字符串是引用类型,其本质是一个java类。
String字符串的定义方式,常用的有如下两种:
通过构造方法创建字符串对象;
直接赋值。
我们在开发时,其实很少使用第一种方式,因为太过啰嗦,一般都是通过直接赋值的方式进行定义。
Java为String类提供了11个构造方法创建String对象,这些方法提供了不同的参数来初始化字符串。当字符串变量被创建处理后,必须经过初始化才能使用。下面是通过构造方法定义String对象的几种方式,大家可以参考:
/** * @author 一一哥Sun * 千锋教育 */ public class Demo01 { public static void main(String[] args) { //通过构造方法创建String对象 //构造一个空字符串,相当于String s1=""; String s1=new String(); System.out.println("s1的长度="+s1.length()+",s1="+s1); //构造一个由内容的字符串,相当于String s1 = "一一哥"; String s2 = new String("跟一一哥学Java"); System.out.println("s2的长度="+s2.length()+",s2="+s2); //通过字节数组构建字符串对象 byte[] b = {97,98,99,100}; String s3=new String(b); System.out.println("s3的长度="+s3.length()+",s3="+s3); //通过字节数组构建字符串对象 //参数1:字节数组;参数2:起始下标;参数3:长度 String s4 = new String(b, 0, b.length); System.out.println("s4的长度="+s4.length()+",s4="+s4); //通过字符数组创建字符串对象 char[] c = {"一","一","哥"}; String s5 = new String(c, 0, c.length); System.out.println("s5的长度="+s5.length()+",s5="+s5); } }
下面是通过直接赋值的方式来定义String对象的方式,大家可以参考:
/** * @author 一一哥Sun * 千锋教育 */ public class Demo02 { public static void main(String[] args) { //直接赋值的方式创建String对象 //注意:null表示String对象为空,而""表示一个长度为零、内容为空的空字符串对象,但该对象不为空 //定义一个值为null的空字符串 String s1=null; System.out.println("s1="+s1); //定义一个内容为空,长度为零的字符串 String s2 = ""; System.out.println("s2的长度="+s2.length()+",s22="+s2); //定义一个带有内容的字符串 String s3 = "一一哥"; System.out.println("s3的长度="+s3.length()+",s3="+s3); } }
我们要注意String s=null
与String s=""
的区别:
String s=null
表示String对象为空,即字符串对象的引用指向了null,还没有指向任何的内存空间;String s=""
是声明了一个字符串类型的引用,其值为"",表示是一个长度为零、内容为空的空字符串对象,但该对象不为空!这个s对象的引用指向的是空字符串的内存空间。
以上内容,是对字符串定义和使用的常规操作,但实际上String字符串还有其他很多有用的方法,接下来壹哥就专门给大家介绍一下这些实用方法。
在Java中,如果我们想比较两个字符串,其实主要是比较两个字符串的内容是否相同,所以应该使用equals()方法,而不要使用==进行比较。
/** * @author 一一哥Sun * 千锋教育 */ public class Demo04 { public static void main(String[] args) { String s1 = "hello"; String s2 = "hello"; //==用于比较两个对象的地址 System.out.println("s1==s2的结果:"+(s1 == s2)); //equals()用于比较两个对象的内容 System.out.println("s1.equals(s2)的结果:"+s1.equals(s2)); } }
大家注意,在上面的案例中,虽然使用==和equals()比较的结果都是true,但实际上这只是”凑巧“罢了。在本案例中,之所以使用”==“进行比较的结果也是true,这是因为Java编译器在编译期,自动把所有相同内容的字符串当作一个对象放入到了字符串常量池。所以s1和s2都指向了同一个引用地址,结果自然就是相同的。但如果我们把上述案例换一种写法,再利用”==“进行比较就不是这样的结果。
/** * @author 一一哥Sun * 千锋教育 */ public class Demo04 { public static void main(String[] args) { //新的写法 String s3 = "yiyige"; //将字符串转为小写 String s4 = "YIYIGE".toLowerCase(); //此时s3和s4是指向两个不同引用地址的对象 System.out.println("s3==s4的结果:"+(s3 == s4)); System.out.println("s3.equals(s4)的结果:"+s3.equals(s4)); } }
从上面的案例中,我们可以得出一个结论,要想比较两个字符串,应该使用equals()方法,而不是"=="方法!
另外在前面的代码案例中,壹哥还给大家介绍了两种定义String字符串对象的方式,并在第2种方式中给大家提到了null与""两种为空的情况。而我们在实际开发中,判断一个字符串对象是null与"",其实是一种非常常见的操作,那么我们该怎么判断String对象是否是null或""呢?
/** * @author 一一哥Sun * 千锋教育 */ public class Demo03 { public static void main(String[] args) { //判断字符串对象是否为null或"" //注意null表示String对象为空,而""表示是一个长度为零、内容为空的空字符串对象,但该对象不为空 //定义一个值为null的空字符串 String s1=null; //判断方式1:判断对象是否为null if(s1==null) { System.out.println("s1字符串对象为null,s1="+s1); } //定义一个内容为空,长度为零的字符串 String s2 = ""; //判断方式2:这种判断写法存在异常隐患,字符串对象s2有可能为null,如果s2.equals()调用时,s2可能为null,此时就会出现空指针异常 if(s2.equals("")) { System.out.println("s2的长度="+s2.length()+",s2="+s2); } //判断方式3:对上面的判断方式进行改进,用以下方式进行判断,就会消除空指针异常的隐患 if("".equals(s2)) { System.out.println("s2的长度="+s2.length()+",s2="+s2); } //判断方式4:判断一个空串的长度是否为0,这种判断字符串是否为空的方式效率更高 if(s2.length()==0) { //我们也可以直接使用字符串的isEmpty()方法,其内部实现与此方式相同。 System.out.println("s2的长度="+s2.length()+",s2="+s2); } //判断方式5:更全面严谨的判断。s==null一定要写在前面,因为如果s为null,先调用后面的s.length()就会出现空指针异常 if(s2 == null || s2.length() == 0) { System.out.println("s2的长度="+s2.length()+",s2="+s2); } //判断方式6:或者我们直接使用字符串的isBlank()方法 if(s2.isBlank()) { System.out.println("s2的长度="+s2.length()+",s2="+s2); } } }
在实际开发时,我们一般是采用第5种判断方式,这种判断方式更为严谨,能够把两种”为空“的情况都考虑到。当然,我们也可以直接使用字符串对象提供的isEmpty()或isBlank()方法,进行判空。另外我们要特别注意,防止出现空指针异常,并且也要考虑采用哪种方式判断为空的情况效率更高。
String字符串中提供了几个与字符串判断相关的方法,可以对一个字符串进行各种判断,这几个方法如下:
equals():判断两个字符串的内容是否相同;equalsIgnoreCase():判断两个字符串是否相等,忽略大小写;isEmpty():判断字符串是否为空串"",主要是判断字符串长度是否为0;isBlank():判断字符串是否为空串"",主要是判断字符串中是否包含空白字符;startsWith():判断字符串是否以指定的字符串开头;endsWith():判断字符串是否以指定的字符串结尾;contains():判断字符串中是否包含指定的字符串,参数是CharSequence类型,而不是String。
/** * @author 一一哥Sun * 千锋教育 */ public class Demo05 { public static void main(String[] args) { String s1 = "yiyige"; //判断两个字符串的内容是否相同 System.out.println("yiYige".equals(s1)); //判断两个字符串是否相等,忽略大小写 System.out.println("yiyige".equalsIgnoreCase(s1)); //判断字符串是否为空,或是否有空白字符 //长度为0,字符串为空 String s2=""; //长度不是0,字符串不为空 String s3=" "; //长度不是0,字符串不为空 String s4=" \n"; //判断字符串是否为空串"" System.out.println("s2为空吗?"+s2.isEmpty());//true System.out.println("s3为空吗?"+s3.isEmpty());//false System.out.println("s4为空吗?"+s4.isEmpty());//false //判断字符串是否是空串或有空白字符 System.out.println("s2为空吗?"+s2.isBlank());//true System.out.println("s3为空吗?"+s3.isBlank());//true System.out.println("s4为空吗?"+s4.isBlank());//true String s5 = "1234567890123"; //判断字符串是否以指定的字符开头 System.out.println(s5.startsWith("12")); //判断字符串是否以指定的字符串开头,并指定开始位置 System.out.println(s5.startsWith("34", 2)); //判断字符串是否以指定的字符串结尾 System.out.println(s5.endsWith("23")); //判断字符串中是否包含指定的字符串 System.out.println(s5.contains("SB")); } }
String字符串中提供了几个与字符串获取相关的方法,这几个方法如下:
charAt():获取指定下标位置上对应的字符,并返回char类型;indexOf():获取指定字符串在原字符串中的下标索引位置,如果不包含该字符串则返回-1;lastIndexOf():该方法与indexOf()类似,但该方法是从后往前找,找到指定字符最后出现的位置;length():该方法用于返回字符串对象中包含的字符数量,即可以获取字符串的长度。
/** * @author 一一哥Sun * 千锋教育 */ public class Demo06 { public static void main(String[] args) { String s1 = "abcn12c3fcds"; //charAt(index),获取指定下标位置上对应的字符,并返回char类型 System.out.println("下标索引位置3上的字符是:"+s1.charAt(3)); //indexOf("字符串"),获取指定字符串在原字符串中的下标位置,如果不包含该字符串则返回-1 System.out.println("字符串的索引位置是:"+s1.indexOf("cn2")); //lastIndexOf("字符串"),与indexOf()方法类似,区别是该方法是从后往前找,找到指定字符最后出现的位置 System.out.println("指定字符的索引为:"+s1.lastIndexOf("c")); //length(),获取字符串的长度 System.out.println("字符串的长度是:"+s1.length()); } }
String字符串中提供了拼接、替换、截取、分割等方法,这几个方法如下:
concat():将某个字符串连接到该字符串的结尾,并返回拼接后的字符串,相当于s1 = s1 + "world";join():用指定的字符串连接字符串数组;replace():将字符串中指定的字符串替换成指定的字符串;replaceAll():利用正则表达式,将字符串中指定的字符串替换成指定的字符串;substring(start,end):字符串截取,从指定的下标索引开始和结束,范围是左闭右开,注意索引是从0开始;substring(index):字符串截取,从指定的索引下标开始一直截取到字符串的最后;split():字符串切割,按照指定的字符串对原字符串进行切割;trim():不改变原有字符串内容,只是去除字符串首尾的空白字符,包括空格、\t、\r、\n。
/** * @author 一一哥Sun * 千锋教育 */ public class Demo07 { public static void main(String[] args) { //用指定的字符串连接字符串数组 String[] arr = {"A", "B", "C"}; String str = String.join("***", arr); // "A***B***C" System.out.println("新的字符串str="+str); String s1 = "hello,SB"; //将字符串与指定的字符串进行拼接,相当于s1 = s1 + "world"; s1 = s1.concat("world"); System.out.println("新的字符串="+s1); //字符串替换:将字符串中指定的字符串替换成指定的字符串 s1 = s1.replace("SB", "**"); System.out.println("新的字符串="+s1); String s2 = "A,,B;C ,D"; //利用正则表达式,将字符串中指定的字符串替换成指定的字符串; //通过正则表达式,把匹配的子串统一替换为"," s2 = s2.replaceAll("[\,\;\s]+", ","); // "A,B,C,D" System.out.println("新的字符串s2="+s2); //字符串截取,从指定的下标开始和结束,范围是左闭右开 s1 = s1.substring(0, 5); System.out.println("新的字符串="+s1); //字符串截取,从指定的下标开始一直截取到字符串的最后。 //注意:StringIndexOutOfBoundsException s1 = s1.substring(3); System.out.println("新的字符串="+s1); //字符串切割,按照指定的字符串对原字符串进行切割 String s2 = "zhangsan-lisi-wangwu"; //利用指定的分隔符进行分割 String[] s = s2.split("-"); System.out.println(Arrays.toString(s)); //去除字符串前后的空格 String s3 = " 你好, 哈哈 "; s3 = s3.trim(); System.out.println("新的字符串s3="+s3); } }
String字符串中提供了将字符串转为小写、大写等方法,这几个方法如下:
toUpperCase():将字符串中的字母都变成大写;toLowerCase():将字符串中的字母都变成小写。
/** * @author 一一哥Sun * 千锋教育 */ public class Demo08 { public static void main(String[] args) { String s1 = "abcADC你好123"; //将字符串中的字母变成大写 System.out.println("转换后新的字符串="+s1.toUpperCase()); //将字符串中的字母变成小写 System.out.println("转换后新的字符串="+s1.toLowerCase()); } }
String字符串中提供了将字符串转为字节、字符数组的方法,这几个方法如下:
getBytes():将字符串转变成字节数组;toCharArray():将字符串变成字符数组。
/** * @author 一一哥Sun * 千锋教育 */ public class Demo08 { public static void main(String[] args) { String s1 = "abcd你好"; //将字符串转变成字节数组 byte[] b = s1.getBytes(); System.out.println(Arrays.toString(b)); //将字符串变成字符数组 char[] c = s1.toCharArray(); System.out.println(Arrays.toString(c)); } }
我们可以利用如下几种方式将其他类型转为String字符串:
利用"+"号拼接:通过拼接得到一个新的字符串对象;valueOf()方法:将其他的类型的数据转换成String类型;构造方法:也可以使用字符串对应的构造方法,将字节、字符数组类型转为字符串对象,效率较低。
/** * @author 一一哥Sun * 千锋教育 */ public class Demo08 { public static void main(String[] args) { //其他类型转字符串的方式 int i = 10; //方式1:利用+号进行转换 String s1 = i+""; System.out.println("整形转字符串s1="+s1); //方式2:将其他的类型的数据转换成String类型 String s2 = String.valueOf(i); System.out.println("整形转字符串s2="+s2); //方式3:将字节数组转为字符串 byte[] nums= {97, 98, 99, 100}; String s3=new String(nums); System.out.println("整形转字符串s3="+s3); } }
除了以上这些方法之外,String还提供了几个可以用于格式化字符串的方法,如下:
format():可以将字符串进行格式化操作。
/** * @author 一一哥Sun * 千锋教育 */ public class Demo09 { public static void main(String[] args) { //实例方法:String对象.format() //%d、%s、%.2f都是占位符 String s = "恭喜你,%s, 你的得分是:%d!"; System.out.println(s.formatted("壹壹哥", 99)); //静态方法:String类.format() System.out.println(String.format("恭喜你,%s, 你的成绩是:%.2f!", "一一哥2", 46.5)); } }
在上面的案例中,涉及到了几个占位符,主要是配合参数进行格式化。当使用占位符时,就需要参数类型要和占位符要求的一致。常用的占位符含义如下:
%s:表示字符串;%d:表示整数;%x:表示十六进制整数;%f:表示浮点数。
另外占位符还可以带格式,例如%.2f是表示显示两位小数。如果你不确定到底该用哪个占位符,可以选择使用%s,因为%s可以显示任何数据类型。
以上这些方法,就是String字符串中的一些常用方法,当然并不是全部的方法。
至此,String字符串对象的定义方式,以及String类中常用的API方法给大家介绍完了,我们要掌握本文的重点内容,比如:
掌握String对象的定义方式;掌握字符串对象的比较方式;掌握字符串判空的方式及方法;了解java中的常用占位符;掌握其他重要方法。
以上就是Java之一文详解String字符串的用法的详细内容,更多关于Java String字符串用法的资料请关注脚本之家其它相关文章!
关键词:
本文将给大家重点讲解一下String的用法,因为这个太常用,也太常考了。String字符串的内容是比较多的,需要
信用卡欠款诉讼程序是什么?信用卡欠款诉讼程序如下:1、向有管辖权的法院递交起诉状,等待法院受理立案;
以下是新疆交建在北京时间5月9日11:00分盘口异动快照:5月9日11点0分,新疆交建盘中涨停,报21 52元,目前
➤➤天津玛雅海滩水公园公园简介:天津玛雅海滩水公园占地达15万平米,以世界三大未解之谜之一的远古玛雅文
顶端新闻·河南商报见习记者关彩晴通讯员刘文伟5月8日,洛阳市宜阳县举行第八期“三个一批”活动暨重大项目
生鲜外带,让美食离消费者更近- 生鲜外带模式的兴起,满足了消费者对品质生活的需求。
1、参加阿。2、中国游泳队东京奥运阵容中缺少三位名将叶诗文、刘湘和傅园慧的身影。3、根据中国游泳协会《2
1、【答案】A【答案解析】试题分析:最北端在黑龙江省漠河以北的黑龙江主航道中心线上。2、最东端在黑龙江
为了给乘客提供更精细、更科学规范的指引,北京拟对地铁标志系统进行更新升级。市交通委组织编制的地方标准
关于北方做大块红烧肉怎么做的内容,包含大块红烧肉怎么做?大块红烧肉怎么做红烧肉怎么做超大块红烧肉怎么
第三届中国-中东欧国家博览会将举行(主题)中工网讯(工人日报-中工网记者北梦原)记者从近日国新办举行的
5月8日北向资金减持5 09万股长久物流。近5个交易日中,获北向资金减持的有4天,累计净减持12 01万股。近20
1、崩坏吧现实爆裂吧精神神罚于此世爆ぜろリアル!弾けろシナプス!パニッシュメントディス、ワールド!hazer
1、您好,WP8酷七网的团队为你解答:设备健康助手是一个windows服务,用于提高用户设备的健康状况,用户可以
格隆汇5月8日丨BannockburnGlobal的首席策略师钱德勒在一份报告中表示,由于美元“一直难以获得提振”,美
近年来,某些西方国家为实现对华遏制打压战略,窃取我国军事军工、经济金融等重点领域的情报信息活动日渐猖
钱塘区作为华东地区最大规模高教园区所在地,集聚14所高校和25万师生,每年有超过5万名高校毕业生走出校门
在积水中使用Drano可能会引起小型爆炸。Drano是庄臣品牌的产品线,包括几种不同类型的排水管清洁剂和一种专
1、教师编制考试是指学校招聘教师的考试师范专业可以报考教师招聘的编制。2、非师范类学生要取得教师资格,
2023年1月2日开工建设苏州地铁10号线(苏虞张市域郊铁路)于2023年1月2日开工建设,全长90 34公里。沿线串
在信用卡逾期之后,如果确定无法还款,那么就可以向银行申请停息挂账。但在信息高度膨胀的当今社会,我们却
1、你没有列出卦象,也没有告知性别?我姑且忽悠猜猜吧!断:你应该是男性。2、你的感情婚姻很不顺利,让你
鹏鼎控股(002938)5月8日晚间公告,公司4月份合并营业收入为14 46亿元,较去年同期减少30 4%。
《奇迹时代4(AgeofWonders4)》中敌方英雄被抓之后也是可以招降的,招降成功之后就可以收为己用帮自己做事
人民网北京5月8日电(焦磊)当前,金融与科技创新融合发展,已成为促进科创和金融产业发展、实现互利共赢的重
Copyright 2015-2022 华东酒业网 版权所有 备案号:京ICP备2022016840号-41 联系邮箱:2 913 236 @qq.com