Java中的String类详解,及其一些常用方法,并比较StringBuffer和StringBuilder的效率

字符串是常量,创建之后不可改变。

字符串字面值存储在字符串池(在方法区里面)中,可以共享。(在JDK6.0及之前版本,字符串常量池是放在Perm Gen区(也就是方法区)中; 在JDK7.0版本,字符串常量池被移到了堆中了。至于为什么移到堆内,大概是由于方法区的内存空间太小了)

引用类型的”变量“存在栈中,真实的对象存在堆中,而栈中的引用类型的变量里面存储的是指向堆中实际对象的地址

Object类有equals()方法,所有类继承自object类,String 这个类重写了equals方法(所以equals比较的是值,==比较的是地址)

equals在Object类中比的是地址,但是SUN公司在String类中重写了equals,重写为比较值,基本Sun公司在每一个类里都重写了equals

public class Dome2 {
    public static void main(String[] args) {
        String name ="成龙";//“成龙”这个常量存储在字符串池中
        name = "阿祖";//”阿祖“赋值给name变量,给字符串赋值时,并没有修改数据,而是重新开辟一个空间
        String name1="阿祖";//优先去匹配字符串池中对象,指向同一个对象
        System.out.println(name.equals(name1));
        //这里会创建两个对象,一个在堆里,一个在字符串池中
        String str1= new String("java");
        String str2= new String("java");
        System.out.println(str1.equals(str2));
        System.out.println(str1==str2);
    }
}

String常用方法

public int length() : 返回字符串的长度。

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 oldChar , char newChar) : 将旧字符串替换成新字符串。

//字符串的使用
//length();返回字符串的长度
//charAt(int index);返回某个位置的字符
//contains(String str);判断是否包含某个字符串
String str = "  qwdefihe ifwh " ;
System.out.println(str.length());
System.out.println(str.charAt(3));
System.out.println(str.contains("fine"));

//toCharArray();返回字符串对应的数组,一般与Array.toString()连用
//indexOf();返回字符串首次出现的位置
//lastIndexOf();返回字符串最后一次出现的位置
System.out.println(Arrays.toString(str.toCharArray()));
System.out.println(str.indexOf("fu"));
System.out.println(str.indexOf("f",5));
System.out.println(str.lastIndexOf("wde"));

//trim();去掉字符串前后的空格,不去掉中间的空格
//toUpperCase(); 把小写转成大写、、toLowerCase();把大写转成小写
//endWith(str);判断是否以str结尾、、startWith(str);判断是否以str开头
System.out.println(str.trim());
System.out.println(str.toUpperCase());
System.out.println(str.toLowerCase());
System.out.println(str.endsWith(" "));
System.out.println(str.startsWith(" "));

//repalce(char old ,char new);用新的字符或字符串替换旧的字符或字符串
//split();堆字符串做拆分
System.out.println(str.replace(" ","ikun"));
String[] arr=str.split("f");
System.out.println(arr.length);
System.out.println(Arrays.toString(str.split("f")));
System.out.println(Arrays.toString(str.split("[ f]")));//选择了两个分隔,中括号后面加+,表示可以出现多个
for (String f : str.split("f")) {
    System.out.println(f);
}

//补充两个方法:equals、compareTo();比较大小(先后顺序)
String s1 = "hello";
String s2 = "HEllO";
System.out.println(s1.equalsIgnoreCase(s2));//忽略大小写比较值
String s3 = "axd";//a--97
String s4 = "xyf";//x--120
System.out.println(s3.compareTo(s4));//等于97-120   第一个相同就比第二个,后面没比的不影响

//特殊的
String s5 = "abc";
String s6 = "abcdef";
System.out.println(s5.compareTo(s6));//比较的是两个的长度,用前面的减去后面的

案例演示

需求:已知String str = "this is a text ";

  1. 将str中的单词单独获取出来

  2. 将str中的text替换为practice

  3. 在text前面插入一个easy

  4. 将每个单词的首字母改为大写

    import java.util.Arrays;
    
    public class Exercise1 {
        public static void main(String[] args) {
            String str ="this is a text";
            System.out.println(Arrays.toString(str.split(" ")));
            System.out.println(str.replace("text","practice"));
            System.out.println(str.replace("text","easy text"));
            String[] arr=str.split(" ");
            for (int i = 0; i < arr.length; i++) {
                char first = arr[i].charAt(0);
                char upperfirst = Character.toUpperCase(first);
                 String news =upperfirst+arr[i].substring(1);//截取字符串,从第几个开始
                System.out.println(news);
            }
        }
    }

    可变字符串

    StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全

    StringBuilder:可变长字符串,JDK5.0提供,运行效率块、线程不安全

    这两个与String的优点:效率高,节省内存

    public class Dome3 {
        public static void main(String[] args) {
            //StringBuuffer和StringBuilder用法一样
            StringBuffer sb = new StringBuffer("java好啊");
            //追加
            sb.append("确实好阿");
            System.out.println(sb.toString());
            //添加
            sb.insert(0,"你以为");
            System.out.println(sb);
            //替换
            sb.replace(0,3,"臣复议");//含头不含尾
            System.out.println(sb);
            //删除
            sb.delete(0,3);
            System.out.println(sb);
            //清空
            //sb.delete(0,sb.length());
            //反转
            sb.reverse();
            System.out.println(sb);
        }
    }

    验证这两个效率高:

    public class Dome4 {
        public static void main(String[] args) {
            //开始时间
            long start = System.currentTimeMillis();
            String str ="";
            for (int i = 0; i < 999; i++) {
                str+=i;
            }
            System.out.println(str);
            //结束时间
            long end = System.currentTimeMillis();
            System.out.println("用时:"+(end-start));
    
            //StringBuffer
            //开始时间
            long start1 = System.currentTimeMillis();
            StringBuffer sb =new StringBuffer();
            for (int i = 0; i < 999; i++) {
                sb.append(i);
            }
            System.out.println();
            //结束时间
            long end1 = System.currentTimeMillis();
            System.out.println("用时:"+(end1-start1));
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值