javaString类学习笔记

String类

在这里插入图片描述

null与""
    public static void main(String[] args) {
        String str1 = "abcdef";
        System.out.println(str1.length());
        System.out.println(str1.isEmpty());//false

        String str2 = null;
        System.out.println(str2.length());
        System.out.println(str2.isEmpty());//空指针异常

        String str3 = "";
        System.out.println(str3.length());//0
        System.out.println(str3.isEmpty());//true

    }
}
equals
  • 判断字符串是否相同
    public static void main(String[] args) {
        String str1 = "abcdef";
        String str4 = "Abcdef";

        System.out.println(str1.equals(str4));//false
        
        System.out.println(str1.equalsIgnoreCase(str4));//true 忽略大小写
    }
}
==
public class test {
    public static void main(String[] args) {
        String str1 = "abcdef";
        String str2 = "abcdef";
        System.out.println(str1 == str2);//true
        String str3 = new String("hello");
        String str4 = new String("hello");
        System.out.println(str3 == str4);//false
    }
}
  • 规定:只要是双引号引起来的字符串,会存在一个字符串常量池当中
  • 存储逻辑:先检查内存中(字符串常量池)是否存在这个字符串。如无,存进去。如无,直接取出现有的。
查找
public static void main(String[] args) {
        String str1 = "abcd";
        String str2 = "ABCD";

        //比较字符串的大小
        System.out.println(str1.compareToIgnoreCase(str2));

        char ch = str1.charAt(1);
        System.out.println(ch);

        int index = str1.indexOf('a',2);
        System.out.println(index);

        int index2 = str1.indexOf("bc");
        System.out.println(index2);

        String str3 = "ababcabcd";
        //指定位置 从后往前找 'a'
        int index3 = str3.lastIndexOf('a',4);
        System.out.println(index3);

    }
}
转化
public static void main(String[] args) {
    String s1 = String.valueOf(1234);
    String s2 = String.valueOf(12.34);
    String s3 = String.valueOf(true);
    System.out.println(s1);
    System.out.println(s2);
    System.out.println(s3);

    int data1 = Integer.parseInt("1234");
    double data2 = Double.parseDouble("12.34");
    System.out.println(data1+1);
    System.out.println(data2+1);

    String str2 = "ABCD";
    String str3 = str2.toLowerCase();
    System.out.println(str3);//转换小写
    System.out.println(str2);//不改变原来的字符串

    String str1 = "abcd";
    System.out.println(str1.toUpperCase());//转换大写


    char[] array = str1.toCharArray();//把字符串 转为数组
    System.out.println(Arrays.toString(array));


    String s = String.format("%d-%d-%d", 2019, 9,14);
    System.out.println(s);//格式化输出 2019-9-14

}
替换
public static void main(String[] args) {
    String str = "ababc";
    //字符的整体替换
    String ret = str.replace('a','l');
    System.out.println(ret);

    //字符串的整体替换
    String ret2 = str.replace("ab","kkk");
    System.out.println(ret2);

    //替换字符串的第一个
    String ret3 = str.replaceFirst("ab","kkkk");
    System.out.println(ret3);

    //字符串的整体替换
    String ret4 = str.replaceAll("a","ppp");
    System.out.println(ret4);

}
拆分
public static void main(String[] args) {
    String str = "abc\\def\\hij";//  abc\def\hij
    //limit 最多分为几组
    String[] strings = str.split("\\\\");// \
    for(String s : strings) {
        System.out.println(s);
    }

    System.out.println("===========");
    String str2 = "abc&def=hij";
    String[] strings2 = str2.split("&|=");
    for(String s : strings2) {
        System.out.println(s);
    }

}
public static void main(String[] args) {
    String str = "name=zhangsan&name=lisi";
    String[] strings = str.split("&");
    //strings2[0]:  name=zhangsan           strings2[1]: name=lisi
    for(String s : strings) {
        //System.out.println(s);
        String[] ss = s.split("=");
        for(String x : ss) {
            System.out.println(x);
        }//forEach循环
    }
}
截取
public static void main(String[] args) {
    String str1 = "abcdef";
    //从指定下标 开始进行截取  截取到指定位置
    String str2 = str1.substring(1,3);//[1,3)
    System.out.println(str2);
}
其他
public static void main3(String[] args) {
    String str1 = "    abc d ef     ";
    System.out.println(str1);
    String str2 = str1.trim();
    System.out.println(str2);
}
字符串的不可变性

在这里插入图片描述

但是可以使用反射机制获取封装内容

StringBuilder&StringBuffer
  • 直接在原字符串上拼接
public static void main6(String[] args) {
    StringBuilder stringBuilder = new StringBuilder("abcd");
    stringBuilder.append("opk");

    StringBuffer stringBuffer = new StringBuffer("abcd");
    stringBuffer.append("opk");
}
String类OJ
  • 字符串第一个唯一字符
class Solution{
    public int firstUniqueChar(String s){
        int[] count = new int[26];
        for(i = 0;i < s.length();i++){
            char ch = s. charAt(i);
            count[ch-'a'] ++;
        }//创建一个count数组记录每个字符出现的次数
        //已经准备好了,再次遍历字符串
        for(int i = 0;i < s.length();i++){
            char ch = s.charAt(i);
            if(count[ch-'a']==1){
                return i;//ASCII码值
            }//再遍历原字符串顺序对应的count
        }
        return -1;//没找到
    }
}
  • 字符串最后一个单词的长度

  • 方法1:直接调用分割方法

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        String[] ss = str.spilt(" ");
        int len = ss[ss.length - 1].length();
        System.out.println(len);
    }
}
  • 方法2:lastIndexof -> subString截取 再求这个字符串的长度
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        int index = str.lastIndexOf(" ");
        String ret = str.substring(index+1);
        System.out.println(ret.length());
    }
}
  • 验证回文串
public class test2 {
    public boolean isPalindrome(String s){
        s = s.toLowerCase();//转化为小写
        int left = 0;
        int right = s.length()-1;

        while(left < right){
            while (left < right && !isCharacterNum(s.charAt(left))){
                left++;
            }
            while (left < right && !isCharacterNum(s.charAt(right))){
                right--;
            }//判断left是合法的字符,判断right是合法的字符
            if(s.charAt(left) == s.charAct(right)){
                left++;
                right--;
            }else{
                return false;
            }
        }
        return true;
    }
    private boolean isCharacterNum(char c){
       if(Character.isDigit(ch)||Character.isLetter(ch)){
           return true;
       }//判断是否为合法的字符,是否为小写
       return false;
    }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值