认识String类

String

String:字符串类型 /引用数据类型 “hello” 由双引号引起来的若干字符,字符串不可变
"a"字符串类型
'a’单引号只能引一个字符
字符串常量池:JDK源码当中,对字符串常量池的定义其实就是一个哈希表,其特点为:如果以前有这个字符串常量,那么就不会重复的进行存储,提高效率。

面试题:String类中两种对象实例化的区别

  1. 直接赋值:只会开辟一块内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用
  2. 构造方法:会开辟两块内存空间,不会自动保存在对象池中,可以使用intern()方法手动入池

字符,字节和字符串

  1. 字符和字符串
    String(char);//数组转字符串
    charAt();//拿到字符串某个下标的元素
    toCharArray();//把字符串转为数组
  2. 字节和字符串
    Sring(bytes);//字节数组转字符串
    str.getBytes();//字符串转字节数组
    str.getBytes(UTF8);//字符串转字节数组,用UTF8编码转换处理

字符串比较

equals比较 true/false
equalsIgnoreCase 忽略情况比较(大小写…)
compareTo 比较字符串大小 abe>abcde 从不同的字符开始比较

字符串查找

  1. contains查找字符串是否存在
  2. indexOf 查找字符串下标 //从头到尾找到的第一个 利用了KMP算法:字符串匹配算法
  3. fromIndex //从fromindex到尾找到的第一个
  4. lastIndex //从后往前找
  5. startWith (字符串,数字)判断是否以…开头的,也可判断指定位置的…
  6. endsWith 判断是否以…结束

例:求最后一个单词的长度

 public static int strLen(String s){
        int index = s.lastIndexOf(" ");
        return s.length()-index-1;
    }
    public static void main(String[] args) {
        String str = "abc abcd abcdef";
        System.out.println(strLen(str));
    }

字符串替换

str1.replace(a,p) //把字符串中的a替换成p
str1.replace(ab,ppp) //把字符串中的ab替换成ppp
str1.replaceFirst(a,p) //把字符串中的第一个a替换成p

字符串拆分

拆分完的要用数组接收
str1.split(" “) //空格处拆分,空格不再保留,即分割的字符不保留
str1.split(”# “,2)//最多以#分两组
str1.split(”\. “) //以.分割,要加转义字符
str1.split(”#|&|@ ") //依次以# & @进行分割

例:字符串多次拆分

 public static void main(String[] args) {
        String str = "name=zhnagsan&age=18";
        String[] ss1 = str.split("&");
        for (String sx : ss1) {
            // System.out.println(sx);
            String[] ss2 = sx.split("=");
            for (String sx2 : ss2) {
                System.out.println(sx2);
            }
        }
    }

字符串截取

str1.subString(2);//截取2号位置本身以及后面的所有元素
str1.subString(2,5)//左闭右开截取2-5位置的元素,不包括5

其他操作

str1.trim();//去除左右两边的空格
str.toUpperCase()//小写转大写
str.toLowerCase()//大写转小写
str.intern()//字符串入池操作
str.concat(“zw”)//连接操作

练习题

1.反转字符串

public String solve (String str) {
        // write code here
    if(str == null) return null;
        char[] chars = str.toCharArray();//把字符串转化成数组
        int i = 0;
        int j = chars.length - 1;
       while(i < j){
           char tmp = chars[i];
           chars[i] = chars[j];
           chars[j] = tmp;
           i++;
           j--;
       }
        return new String(chars);
    }
  1. 第一个只出现一次的字符
  public int FirstNotRepeatingChar(String str) {
        if(str == null || str.length() == 0){
            return -1;
        }
        int[] array = new int[128];
        for(int i = 0;i < str.length();i++){
            char ch = str.charAt(i);
            array[ch]++;
        }
         for(int i = 0;i < str.length();i++){
            char ch = str.charAt(i);
            if(array[ch] == 1){
                return i;
            }
        }
        return -1;
    }

StringBuffer&StringBuilder

  1. StringBuilder可运用appened()方法来拼接字符串
    StringBuffer&StringBuilder大部分功能相同,StringBuffer适用于多线程,可保证线程安全(锁)StringBuilder适用于单线程

  2. StringBuffer和String最大的区别在于:String的内容无法修改,而 StringBuffer的内容可以修改,频繁修改字符串考虑使用StringBuffer

  3. append()方法:http://t.csdn.cn/tn8sg

面试题:解释String,StringBuffer和StringBuilder的区别
4. String内容不可修改,StringBuffer和StringBuilder内容可修改
5. StringBuffer和StringBuilder大部分功能是相似的
6. StringBuffer采用同步处理,属于线程安全操作,适用于多线程;而StringBuilder未采用同步处理,属于线程不安全操作,适用于单线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值