字符串和基本数据包装类
来源:互联网 发布: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);}}
- 字符串和基本数据包装类
- 包装类,基本类和字符串之间转换2
- 黑马程序员---字符串和基本数据类型对象包装类
- Java中字符串对象和基本数据类型包装类
- 包装类、基本类型和字符串之间转换1
- java-包装类、基本数据类型和字符串之间的转换
- 黑马程序员--String 和基本数据包装类
- 黑马程序员--06.基本数据类型的包装类--【Integer类】【字符串和基本数据类型的包装类】
- 基本数据类型和包装类
- 基本数据类型和包装类
- String、字符串缓冲区、基本数据类型包装类
- 黑马程序员_字符串、字符串缓冲区和基本类型包装类
- 基本数据类型数据对象包装类 小结
- String类和基本数据类型包装类
- java 基本数据类型和包装类
- 基本数据类型和包装类的区别
- Java中基本数据类型和包装类
- java基本类型和包装类
- AndroidStudio下载地址
- (转)VS2010 C#调用C++ DLL文件(图文讲解)
- kvm转换vmware
- 程序员必须知道的10大基础实用算法及其讲解
- Linux系统文件同步rsync+ssh+inotify+unison实现
- 字符串和基本数据包装类
- LabelAtlas quick-cocos2dx中的艺术字的使用
- 查看并杀掉tomcat进程
- 泛型的用法
- String类常见的方法
- Quartz插件的使用
- 发送邮件
- (javaweb读书笔记系列之二)servletconfig和servletcontext
- 判断文件的编码方式