认识String类(二)

        前面我们在String类(一)中介绍了有关String字符串底层的相关知识,并分析了其内存布局,接下来我们在本节中就学习一下字符串的具体使用问题。

目录

1.字符、字节和字符串

1.1字符与字符串

1.1.1将字符数组内容变为字符串

1.1.2将部分字符数组内容变为字符串

 1.1.3判断一个字符串是否全部由数字组成

1.2字节与字符串

1.2.1字节数组转变为字符串

 1.2.2将部分字节数组转变为字符串

1.2.3字符串转变字符数组

2.1字符串常见操作

2.1.1比较两个字符串内容

2.1.2比较两个字符串大小关系

2.2字符串查找

2.2.1判断子字符串是否存在

2.3字符串替换

 2.4字符串拆分

 2.5字符串截取

 2.6去除左右边的空格

 2.7字符串转大写

2.8字符串拼接

 3.StringBuffer 和 StringBuilder

  3.1StringBuilder的使用

3.2字符串的拼接

 3.3字符串的逆置


1.字符、字节和字符串

1.1字符与字符串

1.1.1将字符数组内容变为字符串

public static void main(String[] args) {
        char[] val = {'a','b','c'};
        String str = new String(val);
        System.out.println(str);
    }

1.1.2将部分字符数组内容变为字符串

 public static void main(String[] args) {
        char[] val = {'a','b','c','d','e'};
        //1代表从1位置开始,4代表取4个字符
        String str = new String(val,1,4);
        System.out.println(str);
        System.out.println("====================");
        String str2 = "hello";
        char ch = str2.charAt(2);//获取2下标的字符
        System.out.println(ch);
        char[] chars = str2.toCharArray();//把str2指向的字符串对象变成字符数组
        System.out.println(Arrays.toString(chars));

    }

 1.1.3判断一个字符串是否全部由数字组成

//直接调用方法
public static void main(String[] args) {
        String str = "12345a67";
        System.out.println(isNumberChar(str));
    }
//自己实现函数的生成
 public static boolean isNumberChar(String s){
        for (int i = 0;i < s.length();i++){
            char c = s.charAt(i);
            //判断一个字符是不是数字
           boolean flg = Character.isDigit(c);
           if(flg == false){
               return false;
           }
            /* if(c < '0'||c > '9'){
                return false;
            }*/
        }
        return true;
    }

1.2字节与字符串

1.2.1字节数组转变为字符串

 public static void main(String[] args) {
        byte[] bytes = {97,98,99,100};
        //将字节数组变成字符串
        String str = new String(bytes);
        System.out.println(str);
    }

 1.2.2将部分字节数组转变为字符串

public static void main(String[] args) {
        byte[] bytes = {97,98,99,100};
        //将字节数组变成字符串
        String str = new String(bytes,1,3);
        System.out.println(str);

1.2.3字符串转变字符数组

方法一:

        String str2 = "abcd";
        //将字符串变成字节数组
        byte[] bytes1 = str2.getBytes();
        System.out.println(Arrays.toString(bytes1));

方法二:

public static void main(String[] args) throws UnsupportedEncodingException {
        String str2 = "abcd";
        //将字符串变成字节数组方法2
        
        byte[] bytes1 = str2.getBytes("utf-8");
        System.out.println(Arrays.toString(bytes1));
        
        byte[] bytes2 = str2.getBytes("GBK");
        System.out.println(Arrays.toString(bytes2));
       
        System.out.println("==============");
        
        String str3 = "航航";//一个中文是2个字节
        byte[] bytes3 = str3.getBytes("utf-8");
        System.out.println(Arrays.toString(bytes3));
       
        byte[] bytes4 = str3.getBytes("GBK");
        System.out.println(Arrays.toString(bytes4));
    }

 当字符串是中文时,我们使用utf-8和GBK结果是不同的

小结之使用byte[ ]和char[ ]的时候:

    byte[] 是把 String 按照一个字节一个字节的方式处理, 这种适合在网络传输, 数据存储这样的场景下使用. 更适合针对二进制数据来操作.

    char[] 是把 String 按照一个字符一个字符的方式处理, 更适合针对文本数据来操作, 尤其是包含中文的时候.
 

2.1字符串常见操作

2.1.1比较两个字符串内容

 public static void main(String[] args) {
        //区分大小写的比较
        String str1 = "abcdef";
        String str2 = "hello";
        System.out.println(str1.equals(str2));
    }

 public static void main(String[] args) {
        String str1 = "abcdef";
        String str2 = "Abcdef";
        //忽略大小写的情况下比较字符串大小,比如填写验证码
        System.out.println(str1.equalsIgnoreCase(str2));
      }

2.1.2比较两个字符串大小关系

public static void main9(String[] args) {
        String str1 = "abcdef";
        String str2 = "Abcdef";
        //返回两个字母的差
        int ret = str1.compareTo(str2);
        System.out.println(ret);
    }

使用compareTo的结果: //1. 相等:返回0.
                     //2. 小于:返回内容小于0.
                     //3. 大于:返回内容大于0

2.2字符串查找

2.2.1判断子字符串是否存在

 public static void main(String[] args) {
        String str = "ababccdef";
        String tmp = "abc";
        boolean flg = str.contains(tmp);
        System.out.println(flg);
        System.out.println("===================");
        //indexof作用是找到主串str中子串tmp的位置,并返回字串
        int index = str.indexOf(tmp);
        int index2 = str.indexOf(tmp,3);//从3位置开始找
        System.out.println(index);
        System.out.println(str.lastIndexOf(tmp,5));//从后往前找
        //判断str是否是以c为开头的,4表示偏移量
        System.out.println(str.startsWith("c",4));
        //表示是否以f为结尾
        System.out.println(str.endsWith("f"));
    }

2.3字符串替换

 

 2.4字符串拆分

 

 2.5字符串截取

 

 2.6去除左右边的空格

 2.7字符串转大写

 如果转小写则使用toLowercase( )

2.8字符串拼接

 3.StringBuffer 和 StringBuilder

   在String类中有些我们想使用但没有的方法,我们就可以使用StringBuffer 和 StringBuilder

  3.1StringBuilder的使用

public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("abcdef");
        //append就是把abcdef放到StringBuilder里面
        //sb.append("abcdef");
        //StringBuilder每次返回的都是当前的对象,不是新的对象
        System.out.println(sb.toString());
    }

3.2字符串的拼接

 如果我们在一个循环里面有字符串拼接,并且我们不想产生更多的对象,我们就可以使用StringBuilder中的append方法:

 3.3字符串的逆置

 小结:如果我们面试被问到String、StringBuffer、StringBuilder的区别

String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.

StringBuffer与StringBuilder大部分功能是相似的

StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作
 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值