Java中String类的相关常用函数用法

【Java基础学习001】Java String类

大家好我是树树,今天是小树第一次发博客,多多关照呦!
今天给大家讲讲java很常用的中的String类。


前言

字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。


一、创建字符串

创建方法

1.声明对象String
2.定义它的名字
3.进行赋值操作

参考代码如下:

String str = "little tree"
 public static void main(String[] args){
 
 }

String 创建的字符串存储在公共池中,而 new 创建的字符串对象在堆上:
如图:在这里插入图片描述

二、内部逻辑的理解

内存空间

当我们用String直接赋值或者用new创建对象,都是在一个内存空间中存储该对象名下的值,我在下面举一个例子:

  • 先看代码:
 public static void main(String[] args) {
        System.out.println();
        String s1 = "maple";//直接创建
        String s2 = "big tree";
        String s3 = new String("maple");//对象创建
        String s4 = "maple";
        String s5 = new String("maple");
        System.out.println(s3.equals(s5));
        if(s3==s5){
            System.out.println("s3与s5相同");
        }else{
            System.out.println("s3与s5不同");
           }
     }
结果:true,s3与s5不同
  • 那么,由此我们看见了看似自相矛盾的一幕,equals方法判断 s3 与 s5 相同,可是if的布尔逻辑判断 s3 与 s5 不同,明明一样的数据连地址也是一样的,其实理由很简单:
  • equals()是判断两个Object包装类的数据是否相等的函数,只是单单的看看两个数据的包装类型一不一样,包装类型一样的两个数据的值一不一样;
  • 然而if判断中我用的是(s3==s5),这表示s3和s5完全相同才能算对,也就是说不单单取决于两个数据是否相等,还取决于其他因素,这一点上我做出了许多的实验
  • 我首先想到了内存空间,我把内存空间想象成一个多阶而带锁的抽屉柜,锁是打印(也就是输出)某一对象的值时而调用内存空间的调用地址,抽屉就是内存空间,钥匙无限
  • 比如我举的 s3 和 s5 的例子,大家可以自己试试,一次只输出一个随机对象的地址,结束,发现地址都是一样的;再一次输出所有对象的地址,结束,之后调换顺序再输出地址,结束,发现地址的顺序都不可被调换;这也说明了抽屉的“锁”都是一样的。
 System.out.println(s3.getBytes());
结果[B@119d7047

 		System.out.println(s4.getBytes());
        System.out.println(s5.getBytes());
结果[B@119d7047,[B@776ec8df

 		System.out.println(s1.getBytes());
        System.out.println(s2.getBytes());
        System.out.println(s3.getBytes());
        System.out.println(s4.getBytes());
        System.out.println(s5.getBytes());
结果[B@119d7047,[B@776ec8df,[B@4eec7777,[B@3b07d329,[B@41629346

经过查阅资料,都说变量(栈)使用==比较的是对象的(堆)内存地址,而我觉得也是如此,正如我刚刚实验的,在“两个=”两边的两个数据做比较时可以认为是同时被调用,此时,他们的地址分别是[B@119d7047和[B@776ec8df不同,所以不相等。

  • 总的来说只有new方法建立的对象遇到比较会出现问题,而用equals()函数对Object所有包装类均可使用,所以说对象不能用==而只能用equals()。

  • 画个图方便理解:在这里插入图片描述

提示:刚开始自学,纯粹个人猜想,有大神能懂我看法或觉得我是错的请直接批评指出就好

- - 开始今日正式学习 - -

1.信息录入与修改基础逻辑

  1. 登录模拟器
    参考代码如下:
 public static void main(String[] args) {
        String s1 = "maple";
        String s2 = "123456";
        dengLu denglu = new dengLu();
        denglu.loginUser(s1,s2);
    }

    public int loginUser(String username,String password){
        String username_succ = "maple";
        String password_succ = "123456";
        if(username==username_succ&&password_succ==password_succ){
            System.out.println("登陆成功");
            return 1;
        }else {
            System.out.println("登录失败!!!!请检测账号");
            return 0;
        }

    }
结果:登陆成功
  1. 地址信息修改
    参考代码如下:
public static void main(String[] args) {
        String s1 = "西安市";
        Modify(s1,false);
    }


    //      更改地址
    public static void Modify(String address,boolean flag){
        String address_a = "xxxxxx";
        if (flag){
            System.out.println("我的地址:"+address);
        }else{
        System.out.println("我的地址:"+address_a);

    }
结果:我的地址:西安市
  1. 检查邮箱是否合法
public static void isMail(String mail)
    {
        char[] arr = mail.toCharArray();
        boolean isCheck=false;
        for (char s : arr){
            if (s=='@'){
                System.out.println("合法");
                isCheck = true;
            }
        }
        if (!isCheck){
            System.out.println("不合法");
        }
    }
    public static void main(String[] args) {
        String mail = "1069bushi861462114514@qq.com";
        isMail(mail);
    }
结果:合法

2.String中常用函数

  1. 连接两个字符串,s1.concat(s2)
public static void main(String[] args) {
        String s1 = "maple";
        String s2 = "123456";
        System.out.println(s1.concat(s2));
    }
结果:maple123456
  1. 替换字符串
public static void main(String[] args) {
        String a = "mapleXX";
        String b = "万岁";
        System.out.println(a.replace("XX",b));
    }
结果:maple万岁
  1. 查找字符
public static void main(String[] args) {
        String cc = "阿里嘎多美羊羊";
        System.out.println(cc.charAt(0));
        System.out.println(cc.charAt(4));
    }
结果:啊,美
  1. 比较两个字符串(不考虑大小写)
  public static void main(String[] args) {
        String s1 = "tree";
        String s2 = "TRee";
        String s3 = "treE089";
        System.out.println(s1.compareToIgnoreCase(s2));
        System.out.println(s2.compareToIgnoreCase(s3));
    }

结果:0,-3      --- compareTo要考虑大小写,其余用法一样,也可用于Integar包装类---
  1. 通过比较字符串是否一样返回布尔值(对错)
    如字符串与指定 StringBuffer 表示相同的字符序列,则返回 true;否则返回 false。

   public static void main(String args[]) {
        String s1 = "maple";
        String s2 = "treetree";
        StringBuffer s3 = new StringBuffer( "treetree");
        System.out.println(s1.contentEquals( s3 ));
        System.out.println(s2.contentEquals( s3 ));
    }

结果:fault,true
  1. 拆分方法
public static void main(String args[]) {
        String str = "IT男,二刺猿,夜耗子,凿壁偷光";
        String[] arr = str.split(",");//拆解
        for(String s:arr) {
            System.out.println(s);
        }
结果:  IT男
    	二刺猿
		夜耗子
		凿壁偷光
  1. 查找字符
public static void main(String args[]) {
        String a = "syfuhkskdmbjfskjhskdnbe";
        System.out.println(a.substring(1, 3));//左闭右开[1,3)
    }
结果:yf

总结

以上就是今天树树要讲的内容,本文仅仅简单介绍了JavaString类中一些小功能的使用,本猪猪已费心整理,望帮到大家。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值