黑马程序员:String类和StringBuffer类

来源:互联网 发布:python字符串复制 编辑:程序博客网 时间:2024/05/01 00:13

Java语言除了基本类型之外的变量类型都是引用类型。

引用是得到对象的一种方式,是对象的地址,可以理解为简化的指针,但引用屏蔽了一些指针的基本操作,例如++ -- * ,防止程序员直接对地址进行操作。

Java中对象就是通过引用操作的。

java.lang.String类代表不可变的字符序列(使用lang包里的东西,不需要引用lang包

class StringDemo {public static void main(String[] args) {String s1="abc";//s1是一个类类型变量,所以abc是一个对象//字符串最大特点:一旦初始化就不可以被改变String s2=new String("abc");//s1和s2有什么区别?//s1代表一个对象,s2有两个对象System.out.println(s1==s2);System.out.println(s1.equals(s2));//String类复写了Object类中的equals方法,该方法用于判断字符串是否相同}}

/*String类适用于描述字符串事物,那么它提供了多个方法对字符串进行操作常见的有:“abcd”1、获取     1.1字符串中的保函的字符数,即字符串的长度。int length();获取长度 1.2根据位置获取位置上某个字符。char charAt(int index); 1.3根据字符获取该字符在字符串中的位置。 int indexOf(int ch);返回的是ch在字符串中第一次出现的位置。 int indexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置。     int indexOf(int str);返回的是str在字符串中第一次出现的位置。 int indexOf(int str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置。 int lastIndexOf(int ch);2、判断    2.1字符串是否包含某一个子串boolean contains(str);特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1,表示该str步骤字符串中存在,所以,也可以用于对指定判断是否包含。if(str.indexOf("aaaa")!=-1)该方法既可以判断又可以判断获取出现的位置。2.2字符中是否有内容boolean isEmpty();原来是判断字符串长度是否为02.3字符串是否是以指定内容开头boolean startswith(str);2.4字符串是否是以指定内容结尾boolean endswith(str);2.5判断字符串内容是否相同,复写了Object类中的equals方法boolean equals(str);2.6判断内容是否相同,并忽略大小写boolean equalsIgnoreCase();3.转换   3.1将字符数组转成字符串   构造函数:String(char[])                       String(char[],offset,count):将字符数组中的一部分转成字符串静态方法:static String copyValueOf(char[]);                    static String copyValueOf(char[] data,int offset,int count)static String valueOf(char[]);   3.2将字符串转成字符数组   char[] toCharArray();   3.3将字节数组转成字符串        String(byte[])        String(byte[],offset,count):将字节数组中的一部分转成字符串   3.4将字符串转成字节数组   byte[] getBytes();   3.5将基本数据类型转成字符串   static String valueOf(int)   static String valueOf(double)   //3+"";//String.valueOf(3);特殊:字符串和字节数组在转换过程中,是可以指定编码表的。 4.替换   String replace(oldchar,newchar); 5.切割 String[].split(regex); 6.子串,获取字符串中的一部分  String substring(begin);  String substring(begin,end);  7.转换、去除空格、比较     7.1将字符串转成大写或小写 String toUpperCase(); String toLowerCase(); 7.2将字符串两端的多个空格去除 String trim(); 7.3对两个字符串进行自然顺序的比较 int compareTo(string);*/class StringMethodDemo {public static void method_7(){String s="   jfkjd jdkfj fjd   ";sop(s.toLowerCase());sop(s.toUpperCase());sop(s.trim());String s1="abc";String s2="aaa";sop(s.compareTo(s2));}public static void method_sub(){String s="abcdefgh";sop(s.substring(2));//从指定位置到结尾.如果角标不存在,会出现字符串角标越界异常sop(s.substring(2,5));//包含头,不包含尾//获取整个字符串s.substring(0,s.length());}public static void method_split(){String s="jdfa,fjkads,irj";String[] arr=s.split(",");for(int x=0;x<arr.length;x++){sop(arr[x]);}}public static void method_replace(){String s="hello world";//String s1=s.replace('e','g');//如果要替换的字符不存在,返回的还是原字符串String s1=s.replace("world","java");sop("s="+s);sop("s="+s1);}public static void method_trans(){char[] arr={'a','b','c','d','e'};String s=new String(arr);sop("s="+s);String s1="afagags";char[] chs=s1.toCharArray();for(int x=0;x<chs.length;x++){sop("ch="+chs[x]);}}public static void method_is(){String str="ArratDemo.java";sop(str.startswith("Array"));//判断文件名称是否是Array单词开头sop(str.endswith(".java"));//判断文件名称是否是.java的文件sop(str.contains("Demo"));//判断文件名中是否包含Demopublic static void method_get(){String str="afgdfgff";//长度sop(str.length());//根据索引获取字符sop(str.charAt(4));//当访问到字符串中不存在的角标时会发生SrringIndexOutOfBoundsException。//根据字符获取索引sop(str.indexOf('f',2));//如果没有找到,返回值为-1//反向索引一个字符出现位置sop(str.lastIndexOf("a"));//System.out.println(str.length());}public static void main(String[] args) {method_7();//method_sub();//       method_split();//     method_replace();//method_trans();//method_is();//method_get();//String s1="abc";//String s2=new String("abc");//String s3="abc";//System.out.println(s1==s2);//System.out.println(s2==s3);}public static void sop(Object obj){System.out.println(obj);}}

StringBuffer与String

 

StringBuffer和String类似,但StringBuffer可以对字符串对象进行修改

当修改时,不用另在堆里开内存,而是在原来的内存里添加修改的东西,StringBuffer是线程安全的。

/*StringBuffer是字符串缓冲区,是一个容器,特点:1.而且长度是可变化的2.可以字节操作多个数据类型3.最终会通过toString方法变成字符串C create U update R read D delete1.存储   StringBuffer append():将指定数据作为参数添加到已有数据结尾处   StringBuffer insert(index,数据);可以将数据插入到指定位置2.删除StringBuffer delete(start,end);删除缓冲区中的数据,包含start,不包含endStringBuffer deleteCharAt(index);删除指定位置的字符3.获取char charAt(int index)int indexOf(String str)int lastIndexOf(String str)int length()String substring(int start,int end)4.修改StringBuffer replace(start,end,string);void setCharAt(int index,char ch);5.反转StringBuffer reverse();6.void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin)JDK1.5版本之后出现了StringBuilderStringBuffer是线程同步的(多线程),StringBuilder是线程不同步的(单线程)。建议使用StringBuilder升级三个因素1.提高效率 2.简化书写 3.提高安全性*/class StringBufferDemo {public static void main(String[] args) {//method_delete();//method_update();        StringBuffer sb=new StringBuffer("fafafdfgd");char[] chs=new char[9];sb.getChars(2,4,chs,1);for(int i=0;i<chs.length;i++){sop("chs["+i+"]="+chs[i]+";");}public static void method_update(){StringBuffer sb=new StringBuffer("jgfdgsdfm");//sb.replace(1,4,"java");//将角标1-4替换成javasb.setCharAt(2,'k');//将角标为2的字母替换成ksop(sb.toString());}public static void method_delete(){StringBuffer sb=new StringBuffer("affgfg");//sb.delete(1,3);//清空缓冲区//sb.delete(0,sb.length());//删除所有//      sb.delete(2,4);//删除某一个2-4sb.deleteCharAt(2);sop(sb.toString());}public static void method_add(){StringBuffer sb=new StringBuffer();sb.append("abc").append(true).append(34);//方法调用链//StringBuffer sb1=sb.append(34);        sb.insert(1,"qq");sop(sb.toString());//abctrue34//sop(sb1.toString());}public static void sop(String str){System.out.println(str);}}


0 0
原创粉丝点击