Java--String类

1.String

  • Java程序中的所有字符串文本(例如:"abc") 都是此类的实例
  • 字符串字面值是常量,创建之后不可改变。
  • 字符串字面值存储在字符串池中,可以共享。
  • 常用创建方式:
    • String str1 = "hello";//这种创建方式 产生一个对象 在字符串池中开辟一块空间存储
    • String str2 = new String("hello");//这种创建方式会创建两个对象,字符串池 和 堆中 会同时开辟空间存储
package com.monv.str;

public class TestStr {
    public static void main(String[] args) {
        String str1 = "hello";//"hello"常量存储在字符串池中
        str1 = "world";//"world"赋值给str1变量,在赋值的时候,并没有修改数据,而是重新开辟空间,创建"world"
        String str2 = "world";
        
        //字符串的另一种创建形式:new String();这种方式创建字符串会创建两个对象 一个在堆空间 一个在字符串池中
        String str3 = new String("java");
        String str4 = new String("java");
        System.out.println(str3 == str4);//false
        System.out.println(str3.equals(str4));//true String类对equals有重写 比较的是值 
    }
}

 

 

 

 二、常用方法

  • public int lenght():返回字符串长度
  • public char charAt(int index):根据下标获取字符
  • public boolean contains(String str):判断当前字符串中是否包含str
  • public char[] toCharArray():将字符串转换成数组
  • public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1
  • public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引
  • public String trim():去掉字符串前后的空格
  • public String toUpperCase():将小写转成大写
  • public boolean endWith(String str):判断字符串是否以str结尾
  • public String replace(char old,char new):将旧字符串替换为新字符串
  • public String[] split(String str):根据str做拆分
package com.monv.str;

import java.util.Arrays;

public class TestStr1 {
    public static void main(String[] args) {
        //字符串方法的使用
        System.out.println("-----字符串的使用方法1-------");
        //1.length();返回字符串的长度
        //2.charAt(int index);返回某个位置的字符
        //3.contains(String str);判断是否包含某个字符串
        String str1 = "java是最好的编程语言java,java学习中 ";
        System.out.println(str1.length());//25
        System.out.println(str1.charAt(10));//
        System.out.println(str1.contains("java"));//true
        
        System.out.println("-----字符串的使用方法2-------");
        //4.toCharArray();返回字符串对应的数组
        //5.indexOf();返回字符串首次出现的位置
        //6.lastIndexOf();返回字符串最后一次出现的位置
        System.out.println(Arrays.toString(str1.toCharArray()));//[j, a, v, a, 是, 最, 好, 的, 编, 程, 语, 言, j, a, v, a, ,, j, a, v, a, 学, 习, 中,  ]
        System.out.println(str1.indexOf("java"));//0
        System.out.println(str1.indexOf("java", 5));//12;第一个参数:查找的字符串;第二个参数:角标,表示从这个位置开始查找
        System.out.println(str1.lastIndexOf("java"));//17
        
        System.out.println("-----字符串的使用方法3-------");
        //7.trim();去掉前后的空格
        //8.toUppderCase();把小写转换为大写 toLowerCase() 把大写转换为小写
        //9.endWith(String str);判断是否以str结尾 ,startWith(String str);判断是否以str开头
        String str2 = "  Hello World  ";
        System.out.println(str2.trim());//Hello World
        System.out.println(str2.toUpperCase());//  HELLO WORLD  
        System.out.println(str2.toLowerCase());//  hello world  
        
        String str3="hello.java";
        System.out.println(str3.endsWith("java"));//true
        System.out.println(str3.startsWith("hello"));//true
        
        System.out.println("-----字符串的使用方法4-------");
        //10.replace(char old,char new);用新的字符串替换旧的字符串
        //11.split(String str);对字符串进行拆分
        System.out.println(str1.replace("java", "php"));//php是最好的编程语言php,php学习中 
        
        String str4 = "java is the best programing   language,java learn";
//        String[] arr = str4.split(" ");//按空格进行拆分
//        String[] arr = str4.split("[ ,]");//[ ,]表示按空格或,进行拆分
        String[] arr = str4.split("[ ,;]+");//[ ,]+表示空格或,可以连续出现多个 然后再进行拆分
        System.out.println(arr.length);//8
        for(String string : arr){
            System.out.println(string);
        }
        
        //补充两个方法equals()、compareTo();比较大小比较的是字符在编码表的位置
        System.out.println("-----补充的两个方法-------");
        String str5= "hello";
        String str6= "Hello";
        System.out.println(str5.equals(str6));//false
        System.out.println(str5.equalsIgnoreCase(str6));//true; 忽略大小写的比较
        
        String str7="abc";//a:97
        String str8="xyzere";//x:120
        System.out.println(str7.compareTo(str8));//-23
        //下面两个字符串的比较的时候 比较的是长度 因为前边几个字符完全相同"abc",str9"abc"之后没有字符了,str10"abc"之后还有字符
        String str9="abc";
        String str10="abcxyz";
        System.out.println(str9.compareTo(str10));//-3;这个比较的长度 str9的长度减str10的长度
    }
}

 

三、案例

  已知String str="this is a text";
  1.将str中的单词单独获取出来
  2.将str中的text替换为practice
  3.在text前面插入一个easy
  4.将每个单词的首字母改为大写

package com.monv.str;

public class TestStr2 {
    public static void main(String[] args) {
        String str ="this is a text";
        //1.将str中的单词单独获取出来
        System.out.println("----1.将str中的单词单独获取出来----");
        String[] arr = str.split(" ");
        for(String string : arr){
            System.out.println(string);
        }
        //2.将str中的text 替换为practice
        System.out.println("----2.将str中的text 替换为practice----");
        String str2 = str.replace("text", "practice");
        System.out.println(str2);
        //3.在text前面插入一个easy
        System.out.println("----3.在text前面插入一个easy----");
        String str3 = str.replace("text","easy text");
        System.out.println(str3);
        //4.将每个单词的首字母改为大写
        System.out.println("----4.将每个单词的首字母改为大写----");
        //思路:循环每一个单词取第一位然后转换为大写,之后再拼接
        String strAll = "";
        for(int i = 0;i<arr.length;i++){
            char firstchar = arr[i].charAt(0);//去取单词的首字母
            char toUpperChar = Character.toUpperCase(firstchar);//转换为大写
            String newsString = toUpperChar + arr[i].substring(1);//重新拼接    
            if(i == arr.length-1 ){
                strAll += newsString;
                System.out.println(strAll);    //This Is A Text
            }else {
                strAll = strAll + newsString+" ";
            }            
        }
    }
}

四、可变字符串

  • 概念:可在内存中创建可变的缓冲空间,存储频繁改变的字符串
  • 常用方法:public StringBuilder append(String str)
  • StringBuilder :可变长字符串,JDK5.0提供,运行效率快、线程不安全
  • StringBuffer   :可变长字符串,JDK1.0提供,运行效率慢、线程安全
package com.monv.str;
/**
 * StringBuffer和StringBuilder的使用
 * 和String区别(1)效率比String高 (2)比String节省内存
 * @author Administrator
 *
 */
public class TestStr3 {
    public static void main(String[] args) {
//        StringBuffer 和  StringBuilder 功能一样
//        StringBuffer strBuffer = new StringBuffer();
        StringBuilder strBuffer = new StringBuilder();
        //1.append();追加
        strBuffer.append("java开发语言");
        System.out.println(strBuffer.toString());//这里要转换为String输出  java开发语言
        strBuffer.append("java语言学习中");
        System.out.println(strBuffer.toString());//java开发语言java语言学习中
        //2.insert();添加
        strBuffer.insert(0,"写在最前边");//第一个参数:在哪个位置插入
        System.out.println(strBuffer.toString());//写在最前边java开发语言java语言学习中
        //3.replace();替换
        strBuffer.replace(0, 5, "Hello");
        System.out.println(strBuffer.toString());//Hellojava开发语言java语言学习中
        //4.delete();删除
        strBuffer.delete(0, 5);
        System.out.println(strBuffer.toString());//java开发语言java语言学习中
        //5.清空
        strBuffer.delete(0, strBuffer.length());
        System.out.println(strBuffer.length());//0
    }
}
  • 验证StringBuilder的效率高于String
package com.monv.str;
/*
 * 验证StringBuilder的效率高于String
 */
public class TestStr4 {
    
    public static void main(String[] args) {
        //开始时间
        long start = System.currentTimeMillis();
        String str = "";
        for(int i = 0 ;i<9999;i++){
            str += i;
        }
        //结束时间
        long end = System.currentTimeMillis();
        System.out.println("用时:"+(end-start));//用时:804
        
        //开始时间
        long start1 = System.currentTimeMillis();
        StringBuilder strbu = new StringBuilder();
        for(int i = 0 ;i<9999;i++){
            strbu.append(i);
        }
        //结束时间
        long end1 = System.currentTimeMillis();
        System.out.println("用时:"+(end1-start1));//用时:20    
    }
}

 

posted @ 2020-09-10 10:51  改Bug的小魔女  阅读(190)  评论(0编辑  收藏  举报