Java06-1 字符串类 String

本文详细介绍了Java中String对象的特性,包括其不可变性、字符串比较(equals、equalsIgnoreCase、compareTo)、创建与赋值的区别、截取字符串(substring)、获取字符、长度、位置查找、遍历、判断开头与结尾、分割、替换、大小写转换、拼接以及去除空白字符的方法。同时提到了字符串工具类的一些常见方法,如isEmpty、compare和contains等。
摘要由CSDN通过智能技术生成

String是一个不可变字符串,内容是不可变的。当我们更改了字符串的内容,操作的结果肯定是一个新的字符串  (内存地址改变)
String不可被继承,因为被final修饰
==:在基本数据类型中 比较值的;在引用数据类型中 比较内存地址的

字符串直接赋值和new String的区别
   直接赋值,从字符串常量池中查找,如果该字符串存在,就直接引用;如果不存在,将该字符串存入常量池,然后再引用;
   通过new创建字符串对象,先在堆区申请内存空间,将字符串存入该内存中,接着去检查常量池中是否有该字符串,
          如果没有,还会将该字符串在常量池中存放,引用的是堆区中的内存空间
eg:String name = "abc";
       String name2 = "abc";
       String name3 = new String("abc");
       System.out.println(name == name2);     //true
       System.out.println(name == name3);        //false

1.字符串比较
1.1比较字符串内容:比较两个字符串对应位置上的字符      equals、equalsIgnoreCase
(比较顺序:内存地址——判断参数类型String——字符串length——对应位置上的字符,若哪处不相等,即为false)
eg:name = "abc";
       name3 = "ABc";
       boolean eq = name.equals(name3);
       System.out.println(eq);        //false
        //比较时,忽略英文字母大小写
       eq = name.equalsIgnoreCase(name3);
       System.out.println(eq);        //true

1.2 比较大小      compareTo、compareToIgnoreCase      
0:两个字符串相等;   正数:调方法的字符串大;   负数:调方法的字符串小
(字符char 2可隐式转换为int 4比较)
eg:b       此98大
       abc
int r = name.compareTo(name3);
System.out.println(r);     //32
//比较时,忽略大小写
r = name.compareToIgnoreCase(name3);
System.out.println(r);       //0

2.截取字符串
name = "abcde";
//从指定位置截取到结束,包含指定位置
String s = name.substring(1);
System.out.println(s);     //bcde
//截取范围包含开始位置,不包含结束位置
s = name.substring(1, 2);    //(此处name不可变,未被重新赋值,故name = "abcde")
System.out.println(s);     //b

 3.获取字符串中的字符
char ch = name.charAt(0);
System.out.println(ch);    //a
//获取字符串的长度(字符的个数)
int len = name.length();
System.out.println(len);   //长度为5

根据字符获取位置
返回 字符或者字符串 第一次出现的位置;如果不存在,返回 -1
             name = "aabbcecddaa";
    int index = name.indexOf("a");
    System.out.println("index = " + index);    //"a"返回字符串位置下标index为0
返回最后一次出现的位置
    index = name.lastIndexOf("a");
    System.out.println("index = " + index);    //"a"返回字符串位置下标index为10

4.字符串的遍历
for(int i = 0; i < name.length(); i++) {
    ch = name.charAt(i);
    System.out.println("ch = " + ch);    //ch = a ch = b ch = c ch = d ch = e
}

5.判断字符串以什么开头
判断name是否是http开头,true代表是这个开头;否则就不是
      boolean bl = name.startsWith("http");
      System.out.println(bl);        //false
判断结尾
      bl = name.endsWith("de"); 
      System.out.println(bl);     //true

6.按照指定的规则,分割字符串
String names = "张三,,李四,王五";      //此处,,之间有空字符串""
//参数为要分割的字符串  (按照谁分割,谁就成空字符串)
String[] str = names.split(",");
for(String ss : str) {
    System.out.println("ss = " + ss);   //ss = 张三   ss =          ss = 李四  ss = 王五
}

7.替换    将names中的逗号替换为冒号
names = names.replace(",", ":");    //张三::李四:王五
names = names.replace(",", "");    //张三李四王五
System.out.println(names);    

8.大小写转换    (只转换英文大小写,其它不变)
将字符串中的小写字母转换为大写字母
             name = "aabbcecddaa";
    name = name.toUpperCase();
    System.out.println(name);    //AABBCECDDAA
将字符串中的大写字母转换为小写字母
    name = name.toLowerCase();
    System.out.println(name);    //aabbcecddaa

9.字符串的拼接 
+运算法
    String s1 = "ab";
    String s2 = "cd";
    String s3 = s1  + s2;
    System.out.println(s3);         //abcd
使用concat函数进行拼接
    String s4 = s1.concat(s2);
    System.out.println(s4);         //abcd

10.去除前后位置的空白字符(中间的不去)
    String su ="  aa  bb  ".trim();
    System.out.println(su);         //aa  bb    

11.将字符串转换为字符数组 toCharArray();
   char[] array = four.toCharArray();


字符串的工具类
    public class StringUtils {
判断字符串是否为null、空字符串
如果只有两种状态,我们可以通过boolean值来表示;多余两种,可以选择用不同的数字来表示    
    public static boolean isEmpty1(String s) {
        if(s == null || s.length() == 0) {
            return true;
        }
        return false;
    }
    public static int isEmpty2(String s) {        
        if(s == null) {
            return -1;
        }
        //isEmpty():当字符串长度为0,返回值为true;不为0,返回值为false
        if(s.isEmpty()) {
            return 0;
        }
        return 1;
    }    
    public static Status isEmpty3(String s) {    
        if(s == null) {
            return Status.ISNULL;
        }
        if(s.length() == 0) {
            return Status.ISEMPTY;
        }
        return Status.NOTEMPTY;
    }

按照字典顺序比较两个字符串
比较规则:两个字符串对应个位置的字符进行比较,若某个位置上的字符已经比出了大小,就不再往后比较了;
如果每个位置上的字符都相等,那就通过长度的比较得到大小
public static int compare(String s1, String s2) {
    //1比较内存地址
    if(s1 == s2) {
                  return 0;
    }
    //2不进上面的if,s1和s2不可能同时为null    (该题默认谁为null,谁小)
    if(s1 == null) {
        return -1;
    }
    if(s2 == null) {
        return 1;
    }
    //代码能执行到此处,说明是s1和s2都不为null
    //3比较两个字符串中的字符
    //遍历期间,为了防止下标越界,用长度小的作为循环条件
    int minlength = Math.min(s1.length(), s2.length());
    for(int i = 0; i < minlength; i++) {
        char ch1 = s1.charAt(i);
        char ch2 = s2.charAt(i);
        if(ch1 != ch2) {
            return ch1 > ch2 ? 1 : -1;
        }            
    }
    //4当代码执行到此处,说明比较过的字符串都相等,比较长度
    return (s1.length() >= s2.length()) ? (s1.length() == s2.length() ? 0 : 1) : -1;    //效果等同于下
//    if(s1.length() > s2.length()) {
//        return 1;
//    }else if(s1.length() < s2.length()) {
//        return -1;
//    }
//    return 0;
}
            实现字符串中是否包含某个字符串
public static boolean contians(String source, String sub) {
    //1判断是否为null
    if(source == null || sub == null) {   
        return false;
    }
    //2 source的长度不能小于sub的长度
    if(source.length() - sub.length() < 0) {
        return false;
    }
    //按照sub的长度,从source中找出对应范围的字符串进行比较
    int sublength = sub.length();
    //第二个参数最大 sourc.length();    (即sublength + i <= sourc.length();)
    int i = 0;
    while(true) {
        String temp = source.substring(i, sublength + i);
        if(temp.equals(sub)) {
            return true;
        }
        i++;
        if(sublength + i > source.length()) {
            break;
        }
    }
    //while执行完毕,如果方法还没有停,就说明不包含
    return false;    
}
                

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值