字符串和基本数据包装类

来源:互联网 发布:visio 网络拓扑图 注意 编辑:程序博客网 时间:2024/06/06 18:46

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流------

一.字符串

1.1字符串概述

a.字符串对象的创建,代码如下:

public class StringDemo {public static void main(String[] args) {String s1="abc";String s2=new String("abc");String s3="abc";System.out.println(s1.equals(s2));System.out.println(s1==s2);System.out.println(s1==s3);}}

输出结果为:true,false,true,其实第一个字符串对象创建以后是存在于方法区常量池的字符数组中,引用变量s1保存的是该字符串对象在方法区常量池中的地址值,创建第二个字符串对象时,由于使用了关键字new,所以需要在堆内存中开辟空间进行单独存储,由于方法区常量池的字符数组中已经有"abc",只需将其复制到堆内存开辟的空间中即可,所以s2与s1指向的不是同一个字符串对象,也即它们保存的地址值不相等,但是它们指向的两个字符串对象的内容相同,所以s1.equals(s2)返回true,同理,创建第三个对象时由于方法区常量池的字符数组中已经有现成的字符串对象,无需再单独开辟空间创建,只需将字符串对象在方法区中的地址值赋给引用变量s3即可,所以s1==s3是成立的。

1.2字符串常用方法

a.获取

(1)获取字符串长度:int length();注意与获取数组长度区分,数组长度是数组的属性。

(2)获取字符串中指定索引位置对应的字符:char charAt(int index);注意索引从0开始,若索引位置在字符串中不存在,则会报StringIndexOfBoundsException异常。

(3)获取某个字符或子串在字符串中的索引位置:int indexOf("abc"),表示从头开始检索子串"abc"在字符串中第一次出现的位置;int indexOf("abc",int index),表示从index开始检索子串"abc"在字符串中第一次出现的位置;int lastIndexOf("abc"),表示从尾开始检索子串"abc"在字符串中第一次出现的位置。若字符串中没有指定的子串,则返回-1。

(4)从字符串中截取子串:String subString(int start,int end),包含头部包含尾;若String subString(int start),则表示从start位置开始一直截取到末尾(包含末尾)。

b.判断

  (1)  判断字符串是否为空(即字符串长度是否为0):boolean isEmpty();

(2)判断字符串中是否包含子串"abc":boolean contains("abc"),等价于判断int indexOf("abc")是否等于-1。

(3)判断字符串是否是以某个子串str开头或结尾:boolean startsWith(str);boolean endsWith(str)。

c.转换

(1)将字符串转换为字符数组:char[] toCharArray();同理将字符数组转换为字符串:String str=new String(char[] ch)。

(2)将字符串转换为字节数组:byte[] getBytes();同理将字符数组转换为字符串:String str=new String(byte[] by)。

(3)将字符串中某个子串替换为新的子串:String replace(oldStr,newStr)。

(4)字符串大小写转换:toUpperCase(),toLowerCase()。

d.切割字符串:按照某个分割符(例如以逗号为分隔符)把字符串切割为几个子串组成的字符串数组,String[] split(",");

e.去除字符串两端的空格:String trim();

f.两个字符串的比较

(1)boolean s1.equals(s2)比较两个字符串的内容是否相同。

(2)int s1.compareTo(s2),从头依次比较两个字符串的每个字符,若两个字符串的第一个字符相同,则比较第二个字符,依次类推直到出现两字符串对应位上字符不同时,比较结束并返回两个不同字符的ASCII码差值。特别的,若两字符串中其中一个字符串是另一个字符串的子串,则直接返回s1.length()-s2.length()。

g.字符串反转,原理是首先将字符串转换为字符数组,利用字符数组具有下标的特性,反转字符数组的任意一部分就比较容易,反转之后再转换为字符串即可,代码如下:

public class ReverseDemo {public static String reverseString(String str,int start,int end){char[] ch=str.toCharArray();reverse(ch,start,end);return new String(ch); }public static void reverse(char[] ch,int x,int y){for(int start=x,end=y-1;start<end;start++,end--){swap(ch,start,end);}}private static void swap(char[] ch,int x,int y){char temp=ch[x];ch[x]=ch[y];ch[y]=temp;}public static void main(String[] args) {String str="abcdefghijklmn";str=reverseString(str, 2, 6);System.out.println(str);}}

h.获取两个字符串的最大公约子串,原理是首先确定出两个字符串中长度较小的字符串,然后按子串长度从大到小的顺序(由外层循环控制,而内层循环则是控制从左到右依次截取子串长度相同的多个子串)依次从长度较小的字符串中截取子串,每截取到一个子串就判断该子串是否被包含在另一个字符串中,若包含则该子串就是两个字符串的最大公约子串。特别注意java中含头不含尾的规范。

public class TestDemo {public static String getMaxSubString(String s1,String s2){String max="",min="";max=(s1.length()>s2.length())?s1:s2;min=(max==s1)?s2:s1;boolean flag=true;for(int x=0;x<min.length()&&flag;x++){for(int y=0,z=min.length()-x;z<min.length()+1;y++,z++){String temp=min.substring(y,z);if(max.contains(temp)){flag=false;return temp;}}}return "";}public static void main(String[] args) {String s1="abcde";String s2="afcdgh";System.out.println(getMaxSubString(s1, s2));}}

1.3StringBuilder(StringBuffer)类

a.StringBuilder是一个字符串缓冲区,是一个长度可变的容器。

b.向容器中添加多种类型数据,代码如下:

public class StringBuilderDemo {public static void main(String[] args) {StringBuilder sb=new StringBuilder();sb.append(5);sb.append("abc");sb.insert(2, 3.14);sb.append(true);sb.append(sb);Teacher t=new Teacher("jiangyong", 25);sb.append(t);System.out.println(sb);}}

输出结果为:5a3.14bctrue5a3.14bctrueTeacher [age=25, name=jiangyong],之所以会打印出Teacher [age=25, name=jiangyong],是因为Teacher类中重写了Object类中的toString()方法。

该容器类似于数组容器,都具有下标特性,特别注意每个字符对应一个下标,例如3.14对应四个下标,true也是对应四个下标,所以该容器通常是用来处理字符串的。

c.删除容器中的数据,代码如下:

public class StringBuilderDemo {public static void main(String[] args) {StringBuilder sb=new StringBuilder();sb.append("abcdefgh");sb.delete(0, 3);System.out.println(sb);sb.deleteCharAt(2);System.out.println(sb);}}

输出结果为:defgh   degh

d.获取容器中数据,代码如下:

public class StringBuilderDemo {public static void main(String[] args) {StringBuilder sb=new StringBuilder();sb.append("abcdecfgh");char c=sb.charAt(2);//获取指定位置字符System.out.println(c);String s1=sb.substring(2,3);//截取指定位置字符串(含头不含尾)System.out.println(s1);int index=sb.indexOf(s1);//从头检索子串s1第一次出现的位置System.out.println(index);int lastIndex=sb.lastIndexOf(s1);//从尾检索子串s1第一次出现的位置System.out.println(lastIndex);}}
输出结果为:c  c  2  5

e.修改容器中的数据,代码如下:

public class StringBuilderDemo {public static void main(String[] args) {StringBuilder sb=new StringBuilder();sb.append("abcdecfgh");sb.replace(2, 3, "w");System.out.println(sb);sb.setCharAt(2, 'm');System.out.println(sb);}}

输出结果为:abwdecfgh     abmdecfgh

f.反转,代码如下:

public class StringBuilderDemo {public static void main(String[] args) {StringBuilder sb=new StringBuilder();sb.append("abcdecfgh");sb.reverse();System.out.println(sb);}}

二.基本数据包装类

2.1利用基本数据包装类的静态方法将字符串转换为基本数据

a.int对应的包装类为Integer,char对应的包装类为Character,其他基本数据类型对应的包装类只需将其数据类型首字母大写即可。

b.将字符串转换为基本数据,代码如下:

public class StringBuilderDemo {public static void main(String[] args) {int a=Integer.parseInt("123");//若写成"a123"则会报ParseFormatException异常System.out.println(a);boolean b=Boolean.parseBoolean("true");System.out.println(b);}}

2.2利用基本数据包装类的静态方法实现进制转换

a.将int型的十进制数据转换为其他进制数据,代码如下:

public class StringBuilderDemo {public static void main(String[] args) {String s1=Integer.toBinaryString(100);//转换为二进制数据System.out.println(s1);String s2=Integer.toHexString(100);//转换为十六进制数据System.out.println(s2);String s3=Integer.toOctalString(100);//转换为八进制数据System.out.println(s3);}}

输出结果为:1100100   64   144

b.同理也可将其他进制数据转换为十进制数据,代码如下:

public class StringBuilderDemo {public static void main(String[] args) {int a=Integer.parseInt("1100100", 2);//将二进制数据转换为十进制数据System.out.println(a);int b=Integer.parseInt("64", 16);//将十六进制数据转换为十进制数据System.out.println(b);int c=Integer.parseInt("144", 8);//将八进制数据转换为十进制数据System.out.println(c);}}

输出结果为:100   100   100

2.3自动装箱与自动拆箱,代码如下:

public class StringBuilderDemo {public static void main(String[] args) {Integer a=127;//自动装箱,等价于Integer a=new Integer(127);a=a+2;//等式右边先将a自动拆箱为基本数据以便进行加法运算,运算结束又将运算结果自动装箱System.out.println(a);Integer b=127;Integer c=127;//由于堆内存中已经存在值为127(在-128~127范围内)的Integer对象b,所以只需将b的值赋给c即可System.out.println(b==c);Integer b1=128;Integer c1=128;System.out.println(b1==c1);}}









0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鞋放健身房丢了怎么办 京东商家搞虚假活动怎么办 淘宝买的商品出现质量问题怎么办 买了重复的东西怎么办 借记卡在atm用不了怎么办 淘宝评论视频审核不通过怎么办 京东票据丢了怎么办 开拼多多找不到低价货源怎么办 要是校花追你该怎么办 苏宁自提逾期怎么办 天猫超市有问题怎么办 买的东西质量有问题怎么办 淘宝优惠额度大做不了怎么办 淘宝天猫拒绝退货退款怎么办 u盘变成活动分区怎么办 学生上课纪律差家长老师怎么办 老师管纪律学生打老师怎么办? 淘宝店铺层级排名下降怎么办 网购不支持该地区销售怎么办 分销公司佣金不给业务员怎么办 淘宝买家账号违规了怎么办 王者荣耀打野被队友抢野怎么办 艾肯材料换错了怎么办 淘宝直播粉丝5万怎么办 淘宝直播刚开始好难怎么办 分期乐账号忘记了怎么办 外链多了影响网站排名怎么办 自粘墙纸有气泡怎么办 贴壁纸阴角不力怎么办 自贴墙纸有气泡怎么办 壁纸贴的有起泡怎么办 pos机连接主机失败怎么办 无线pos机连接主机失败怎么办 水墨晕染模板用不了怎么办 申请入驻饿了么失败怎么办 天猫流量大淘宝怎么办 拼多多商家不退款怎么办 苹果手机开流量显示e怎么办 苹果手机有服务流量打不开怎么办 苹果七plus流量打不开怎么办 苹果手机突然打不开流量怎么办