Java基础(Strrng类)

来源:互联网 发布:网络远程正规吗 编辑:程序博客网 时间:2024/06/05 05:24


一、String类

String类特点:String s1 = "abc";   String s2 = new String("abc");

1、在这里s1是一个类类型变量,所以“abc”是一个对象

2、String类一旦被初始化,就不可以被改变    s1 = "KK",当打印时虽然s1的值打印的并不是“abc”,但是只能说明是s1的指向变了

3、s1和s2的区别:s1在内存中只有一个对象,而s2在内存中却有两个对象

4、String类中的equals方法和Object类中equals方法的区别:String类中的equals覆盖了Object类中的equals方法,Object类中的方法比较的是对象是否相等,而String类中的方法比较的是内容是否相等

String常用方法分类

用于获取:

1、获取字符串的长度:int length();

2、获取某个位置上的字符:char charAt();

3、根据字符串获取索引: int indexOf();

4、获取指定字符在字符串中第一次出现时的索引:int indexOf(String st);        //没有时返回-1

                                                                          int indexOf(String str, int index);

5、获取指定字符在字符串中最后一次出现的索引:int lastIndexOf(String st)

                                                                                           int lastIndexOf(String s, int index);

6、获取字符串的哈希码:int  hashCode();

用于判断:

1、判断字符串中是否包含某一个字符:boolean contains(String st);

2、判断字符串是否以指定后缀名结束:boolean endsWith(String st)

3、判断字符串是否以指定前缀开始: boolean startsWith(String st);

4、判断两个字符串是否相等: boolean equals(String st);

5、判断两个字符串是否相等,不区分大小写:booleanequalsIgnoreCase();

6、判断字符串是否有内容,其实就是在判断字符串长度是不是为0: boolean   isEmpty();

用于转换

1、将字符串中的每个字符都转换为对应的ASCII码值,存放于byte类型数组中   byte[]  getByte();

2、将字符型数组转换为字符串   :通过构造函数  String (char []  ch);

                                通过函数  :   String    copyValueOf(char []  ch);

                                                          String   copyValueOf(char [] ch, int start, int end);

3、将字节数组(byte类型数组)转换为字符串:通过构造函数String(byte [] byres)

4、将字符串转换为字符数组:char []  toCharArray();

5、将基本数据类型转换为字符串 static String  valueOf(int a);

                                                          static String  valueOf(char ch);

                                                          static String  valueOf(float f);

                                                          static String  valueOf(double  d);

用于替换:

用指定的字符串去替换字符串中与之匹配的字符串    String  replace(String st);

用于获取子串

返回一个新字符串,他是该字符串的子字符串     String  subString(int index);

                                                                                      String  subSting(int start, int end)

其他:

用于清除左右两边的空格:String trim();

将字符串转换为大写:String toUpperCase();

将字符串转换为小写:String toLowerCase();
对两个字符串进行自然顺序的比较:  int  compareTo(String st);

对两个字符串进行自然顺序的比较,不考虑大小写:int  compareToIgnoreCase(String st);

将指定字符串添加到此字符串结尾:String comcat(String st);

小练习:

class  StringTest1{public static void main(String[] args) {//下标和数组下标一样,都是从0开始String st = "abacfddefg";//获取长度sop(st.length());//获取某个位置上的字符:sop(st.charAt(2));//获取指定字符在字符串中第一次出现时的索引sop(st.indexOf("d"));//获取指定字符在字符串中第一次出现时的索引,从指定的索引搜索sop(st.indexOf("d",3));//获取指定字符在字符串中最后依次出现时的索引sop(st.lastIndexOf(f));//判断字符串是否以指定前缀开始: boolean startsWith(String st);sop(st.startsWith("Demo"));//判断字符串是否以指定后缀名结束:boolean endsWith(String st)sop(st.endsWith(".java"));//判断字符串中是否包含某一个字符:boolean contains(String st);sop(st.contains("Test"));}public static void sop(Object obj){System.out.println(obj);}//模拟字符串转字符数组方法public static char[] myToCharArray(String st){char [] ch = new char[st.length()];for(int i=0;i<st.length();i++){ch[i] = st.charAt(i);}return ch;}//indexOf(String st)原理public static int myIndexOf(String str,String st,int index){//str代表的是原字符串,st代表的是要索引的字符串char [] ch = myToCharArray(str);for(int i = index;i<ch.length;i++){if(ch[i]==st)return i;}return -1;}//indexOf(String st)原理public static int myIndexOf(String str,String st){return myIndexOf(str,st,0);}//模拟将字符型数组转换为字符串public static String myCopyValueOf(char[] ch){String st = "";for(int i=0;i<ch.length;i++){st+=ch[i];}return st;}//判断字符串是否有内容  isEmpty();public static int myIsEpty(String str){return str.length()==0;}//模拟清除左右连边空格  trimpublic static String myTrim(String str){int start = 0,end = str.length()-1;while(str.indexOf(" ",start)!=-1&&start<=end)start++;while(str.lastIndexOf(" ",end)!=-1&&start<=end)end--;return str.subString(start,end);}//将一个字符串进行反转"abcdefg";abfedcgpublic static String reverseString(String str){char [] ch = str.toCharArray();reverse(ch);return new String(ch);}public static void reverse(Object [] obj){for(int start=0,end=obj.length-1;start<end;start++,end--){swp(obj,start,end);}}public static void swp(Object [] obj,int start, int end){obj[start] = obj[start]^obj[end];obj[end] = obj[start]^obj[end];obj[start] = obj[start]^obj[end];}}

练习2

/*获取两个字符串中最大相同子串。第一个动作:将短的那个串进行长度一次递减的子串打印。"abcwerthelloyuiodef""cvhellobnm"思路:1,将短的那个子串按照长度递减的方式获取到。2,将每获取到的子串去长串中判断是否包含,如果包含,已经找到!。*/class  StringTest3{public static String getMaxSubString(String s1,String s2){String max = "",min = "";max = (s1.length()>s2.length())?s1: s2;min = (max==s1)?s2: s1;//sop("max="+max+"...min="+min);for(int x=0; x<min.length(); x++){for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++){String temp = min.substring(y,z);sop(temp);if(max.contains(temp))//if(s1.indexOf(temp)!=-1)return temp;}}return "";}public static void main(String[] args) {String s1 = "ab";String s2 = "cvhellobnm";sop(getMaxSubString(s2,s1));}public static void sop(String str){System.out.println(str);}}

二、StringBuffer

是一个容器,当使用同一个对象调用该对象的append方法、delete方法、insert方法时,返回的都是该类对象

常用方法:

StringBuffer     append();                       用于在原有字符串的基础上追加字符串,可以追加任意类型

char    charAt(char ch);                           和String类中的charAt用法一样

StringBuffer   delete(int strtt,int end)    可以用来删除指定位置的元素,也可以用来删除从某个位置到某个位置之间的字符串

int      indexOf                                             和String类中的indexOf用法一样

StringBuffer    insert(int index,任意类型)    用于将任意数据类型以字符串的形式插入到指定索引处

int  lastIndexOf()                                         和String类中的lastIndexOff用法一样

StringBuffer   replace(int start, int end, String str)     给指定位置的字符串替换为指定字符串

String    reverse()                                    用于反转字符

void   setCharAt(int index,   char  ch)            将给定索引处的字符设置为ch

void   setLength(int newLength);              设置字符序列的长度

String    subString                                      和String类中的subString用法一样                 

StringBuffer特点:

1、长度是可以变化的

2、可以操作多种数据类型

3、最终会通过toString方法变成字符串

      

三、StringBulider

用法和StringBuffer用法一样,只有一点区别就是StringBuffer是同步的,而StringBuilder是不同步的,建议在使用时使用StringBuilder,因为它在没有使用到多线程时,效率要比StringBuffer要高













1 0
原创粉丝点击