zoukankan      html  css  js  c++  java
  • Java第十二章 String类

    Java String类

       String:代表不可变的字符序列。底层使用char[]存放。

      String是final的

    ==:是比较地址是否相同。

    String类中重写了equals()方法:是比较值是否相同。

    注:

      1.声明字符串的变量,它的值首先会去字符串常量池中查找,如果没有这个值,创建一个,并让栈空间的变量名指向这个地址。

      2.拼接字符串,会重新创建一个新的地址空间存放。

        @Test
        public void testString(){
            String str1 = "JavaEE";
            String str2 = "JavaEE";
            String str3 = new String("JavaEE");
            String str4 = "JavaEE" + "Android";
            String str5 = "Android";
            String str6 = str1 +str5;
            str5 = str5 +"Handoop";
            String str7 = str6.intern();
            System.out.println(str1 == str2);//true
            System.out.println(str1 == str3);//false
            System.out.println(str1.equals(str3));//true
            System.out.println(str4 == str6);//false
            System.out.println(str4.equals(str6));//true
            System.out.println(str7 == str4);//true
            String str8 = "JavaEEAndroid";
        }

    String类的常用方法

      

        public int length()//返回字符串的长度
        public char charAt(int index)//返回在指定index位置的字符,index从0开始
        public boolean equals(Object anObject)//比较两个字符串是否相等。相等返回true,否则返回false。一位一位比较
        public int compareTo(String anotherString)//比较两个字符串,从前往后一位一位比较,如果两个对应位置上不相同,则返回两个asc码的差值。
        public int indexOf(String s)//返回s字符串首次在当前字符串中出现的位置。若无,返回-1
        public int indexOf(String s,int startpoint)//返回s字符串在当前字符串startpoint位置。首次出现的位置。
        public int lastIndexOf(String s)//返回s字符串最后一次在当前字符串中出现的位置。若无,返回-1
        public int lastIndexOf(String s,int startpoint)//返回s字符串在当前字符串startpoint位置。最后一次出现的位置。
        public boolean startWith(String prefix)//判断当前字符串是否以prefix字符串开始
        public boolean endWith(String suffix)//判断当前字符串是否以suffix结束。
        public boolean regionMatches(int firstStart,String other,int otherStart,int length)
        //判断当前字符串从firstStart开始的子串与另一个字符串other从otherStart开始,length长度的字符串是否equals。
        String str1 = "adggcgesdwa";
        String str2 = "esdw";
        System.out.println(str1.regionMatches(6, str2, 0, str2.length()));//true

        public String substring(int startpoint)//返回从start(包括)开始的字符串
        public String substring(int start,int end)//返回从start开始到end结束的一个左闭右开(包括左边不包括右边)的字符串
        public String replace(char oldChar,char newChar)//返回用newChar字符替换所有出现的oldChar字符的字符串
        public String replace(String oldChar,String newChar)//返回用newChar字符串替换所有出现的oldChar字符串的字符串
        public String trim()//去除当前字符串中首尾出现的空格,若有多个,去除多个。
        public String concat(String str)//连接当前字符串与str
        public String[] split(String regex)//按照regex将当前字符串拆分,拆分多个字符串,整体构成一个字符数组
        String str = "abc*wde-eg3-le";
        String[] strs = str.split("-");
        for(int i=0;i<strs.length;i++){
        System.out.println(strs[i]);
        }
        //abc*wde
        //eg3
        //le

     练习:

    * 1.模拟一个trim方法,去除字符串两端的空格
    *
    * 2.将一个字符串进行反转,将字符串中指定部分进行反转,比如将“abcdefg”反转为“abfedcg”
    *
    * 3.获取一个字符串在另一个字符串出现的次数
    * 比如:获取“ab”在“abkkcadkabebfkabbsdw”中出现的次数
    *
    * 4.获取两个字符串中最大相同子串
    *
    * 5.对字符串中字符进行自然顺序排序
    */

     

        5.对字符串中字符进行自然顺序排序
    @Test
    public void test4(){ String str ="agefpekgmf"; System.out.println(sort(str)); } public String sort(String str){ char[] c = str.toCharArray(); Arrays.sort(c); return new String(c); }  4.获取两个字符串中最大相同子串 @Test public void test3(){ String str1 = "abkkcadkabebfkabbsdw"; String str2 = "abebabkkwd"; System.out.println(getMaxString(str1, str2)); } public List<String> getMaxString(String str1,String str2){ String maxStr = (str1.length()>str2.length())? str1 : str2; String minStr = (str1.length()<str2.length())? str1 : str2; List<String> list = new ArrayList<>(); int len = minStr.length(); for(int i=0;i<len ; i++){ for( int x=0,y=len-i;y<len;x++,y++){ String str = minStr.substring(x, y); if(maxStr.contains(str)){ list.add(str); } } if(list.size()!=0){ return list; } } return null; }
    * 3.获取一个字符串在另一个字符串出现的次数
    * 比如:获取“ab”在“abkkcadkabebfkabbsdw”中出现的次数 @Test
    public void test2(){ String str = "abkkcadkabebfkabbsdw"; String str1="abke"; System.out.println(getTime(str, str1)); } public int getTime(String str1,String str2){ int count = 0; int len; while((len = str1.indexOf(str2))!=-1){ str1= str1.substring(len+str2.length()); count++; } return count; }
    2.将一个字符串进行反转,将字符串中指定部分进行反转,比如将“abcdefg”反转为“abfedcg” @Test
    public void test1(){ String str = "abcdefg"; System.out.println(reverseString(str, 3,7)); } public String reverseString(String str,int start,int end){ char[] c = str.toCharArray(); for(int i=start,j=end-1;i<j;i++,j--){ char temp = c[i]; c[i] =c[j]; c[j] = temp; } String str1 = new String(c); return str1; } }
     1.模拟一个trim方法,去除字符串两端的空格

      public static String trim1(String str){
          int start = 0;
          int end = str.length()-1;
          while(start<end && str.charAt(start) ==' '){
            start++;
          }
          while(start<end && str.charAt(end) ==' '){
            end--;
          }

         return str.substring(start, end+1);
      }
        public static void main(String[] args) {
            String str1 = " 22sd1 331 ";
            String str2 = trim1(str1);
            System.out.println(str2);
        }

     String与包装类_字节数组_字符数组间的转换

      1.字符串与基本数据类型、包装类之间的转换

         ①字符串------>基本数据类型、包装类:调用相应的包装类的parseXxx(String str);

         ②基本数据类型、包装类------>字符串:调用字符串的重载的valueOf()方法

      2.字符串与字节数组间的转换

         ①字符串------>字节数组:调用字符串的getBytes()

         ②字节数组------>字符串:调用字符串的构造器

      3。字符串与字符数组间的转换

         ①字符串------>字符数组:调用字符串的toCharArray()

             字符数组------>字符串:调用字符串的构造器

     StringBuffer与StringBuild

      java.lang.StringBuffer:代表可变的字符序列,可以对字符串内容进行增删

      底层实现是字符数组,默认为16个字符

      StringBuffer方法

      StringBuffer append(String s), StringBuffer append(int n),

      StringBuffer append(Object o),StringBuffer append(char n),

      StringBuffer append(long n),StringBuffer append(boolean n),

      StringBuffer insert(int index,String str)

      public StringBuffer reverse()

      StringBuffer delete(int startIndex,int endindex)

      public char charAt(int n);

      public void setCharAt(int n,char ch)

      StringBuffer replace(int startIndex,int endIndex,String str)

      public int indexOf(String str)

      public String substring(int start,int end)

      public int length()

      总结:增:append()

         删:delete(int i,int j)

         改:setCharAt(int index,char ch)

         查: charAt(int n)

         插入:insert(int index,String str)

         反转:reverse()

         长度:length()

      java.lang.StringBuilder:可变的字符序列,是jdk5.0新加入的,线程不安全,效率要高于StringBuffer

      对比String、StringBuffer、StringBuilder三者再添加上的效率:

        效率从高到低:StringBuilder>StringBuffer>String

       

  • 相关阅读:
    c++ 的几种强制转换的讨论
    观察者模式
    epoll实现linux进程通信
    vim 实现 go to definition的功能
    svn 的使用
    makefile文件的技术
    [转]epoll技术
    [转]poll技术
    Linux重定向的理解
    避免僵死进程的方法
  • 原文地址:https://www.cnblogs.com/yangHS/p/10690151.html
Copyright © 2011-2022 走看看