JAVA字符串

Java中的字符串是一个对象,由java.lang.String类表示。它是不可变的,也就是说一旦创建了一个字符串对象,就不能更改它的值。字符串对象可以通过字面值创建,也可以使用构造函数来创建。

创建String对象的两种方式

1、直接赋值

String name="Csdn";

2、new一个

public String()     创建空白字符串,不含任何内容

public String(String original)    根据传入的字符串,创建字符串对象

public String (char[] chs)   根据字符数组,创建字符串对象

public  String(byte[] chs)  根据字节数组,创建字符串对象

1、使用直接赋值的方式获取一个字符串对象

 

2、使用new的方式来获取一个字符串对象

3、传递一个字符串,根据传递的字符串内容在创建一个新的字符串对象

4、传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象

 

5、 传递一个字节数组,根据字节数组的内容再船舰一个新的字符串对象

这个传递的就是ASCLL码对应的值

 

字符串的比较

基本数据类型

int a=10;
int b=20;
System.out.println(a==b);//false

基本数据类型比较的是数据值

引用数据类型

String s3=new String("abc");
String s4=new String("abc");
System.out.println(s3==s4);//false

引用数据类型比较的是地址值

每次new出来的都是新的地址

大家可以参考这个代码自己试一下哦 

字符串比较还会用到两个方法

boolean equals方法(要比较的字符串)    完全一样结果才是true,否则为false

boolean equalslgnoreCase(要比较的字符串)    忽略大小写的比较 

--------------------------------------------------------------------------------------------------------------------------

再来看一个例子

String s1=new String("abc");
String s2="Abc";
System.out.println(s1 == s2);

这个比较的结果又是什么呢

String s1=new String("abc");//记录堆里面的地址值

String s2="Abc";//记录串池中的地址值
System.out.println(s1 == s2);//false

 串池可以理解为字符串常量值,直接存储的值放在了串池里,StringTable(串池)在jdk7版本开始,从方法区挪到了堆内存中

而new出来的都存储再堆内存中

当双引号直接赋值时,系统会检查该字符串在串池中是否存在,存在就复用,不存在就创建新的

--------------------------------------------------------------------------------------------------------------------------

我们再看下一个案例

如果是下面这样呢,答案又会是什么?

我们先看结果

居然是false,那么为什么呢?

其实String s1=sc.next();这个操作是在next()里的核心代码里其实是new出来的值,所以两个值肯定不一样

---------------------------------------------------------------------------------------------------------------------

再来看个案例吧

已知正确的用户名和密码,请用程序实现模拟用户登录,总共给三次机会,登录之后,给出相应的提示

首先我们得定义两个变量记录正确的用户名和密码

再定义一个计数器计数,次数不能大于3

接下来就得再while循环里实现手动输入的操作,并且还得将正确的用户名和密码与输入的用户名密码进行比较,比较的话用的就是equals()

最后再做一次判断,判断count是否等于3,等于三就代表输入了三次还没有登陆成功,要给用户做出反应

 

完整的测试代码如下

public class StringDemo3 {
    public static void main(String[] args) {

        //定义两个变量记录正确的用户名和密码
        String rightUsername = "admin";
        String rightPassword = "123456";


        //键盘录入用户名和密码


        int count=0;
        while(count<3) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入用户名:");
            String username = sc.next();
            System.out.println("请输入密码:");
            String password=sc.next();

            //比较
            if (username.equals(rightUsername) && password.equals(rightPassword)) {
                System.out.println("登陆成功");
                break;
            } else {
                System.out.println("用户登陆失败,用户名或密码有误,您还剩"+(2-count)+"次机会");
                count++;

            }
        }
        if(count==3){
            System.out.println("已输入三次错误的用户名密码,登录失败");
        }
    }
}

字符串的练习

遍历字符串

需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串

这里我们需要用到两个方法

public char charAt(int index)    根据索引返回字符

public int length()  返回此字符串的长度 

public class StringDemo {
    public static void main(String[] args) {
        //1.键盘录入一个字符串
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str=sc.next();
        //2.进行遍历
        for (int i = 0; i < str.length(); i++) {
            //i依次表示字符串的每一个索引
            char c = str.charAt(i);
            System.out.println(c);
        }
    }
}

 

这就是最简单的遍历

统计字符次数

键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数

这一题我们需要用到计数器,定义三个计数器分别来计数,每当满足条件时+1;其他的都跟上一题差不多

public class StringDemo2 {
    public static void main(String[] args) {
        //1.键盘录入一个字符串
       Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        int bigCount=0;
        int smallCount=0;
        int numberCount=0;
        //2.进行遍历
        for (int i = 0; i < str.length(); i++) {
            //i依次表示字符串的每一个索引
            char c = str.charAt(i);
            if(c>='A'&&c<='Z'){
                bigCount++;
            } else if (c>='a'&&c<='z') {
                smallCount++;
            }
            else if(c<='9'&&c>='0'){
               numberCount++;
            }
        }
        System.out.println("大写字母有"+bigCount+"个");
        System.out.println("小写字母有"+smallCount+"个");
        System.out.println("数字字符有"+numberCount+"个");
    }
}

拼接字符串

定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果

例如:数组为int[]  arr={1,2,3};

            执行方法之后输出的结果为:    [1,2,3]

分析:方法里我得判断以下传进来的数据是否有效,如果为null,我就返回空的,如果数组长度为0,我就返回"[]",在这之后就是最主要的步骤了

我们先试着这样运行以下看看结果如何

这样的结果多了一个逗号

我们就得另作一个判断

只要我的i小于数组长度-1,也就是在最后一位之前,我们的result都要加上","这样一运行就符合条件了

下面是完整测试代码

public class StringDemo3 {
    public static void main(String[] args) {
       int[] arr={1,2,3,4};
       String result= pinJie(arr);
        System.out.println(result);
    }
    public static String pinJie(int[] arr){
        if(arr==null){
            return "";
        }
        if(arr.length==0){
            return "[]";
        }
        String result="[";
        for (int i = 0; i < arr.length; i++) {
            //i索引 arr[i]元素
          result= result+arr[i];
          if(i<arr.length-1){
              result=result+",";
          }
        }
        //拼接左括号
        result=result+"]";
      return  result;
    }
}

运行结果如下

字符串反转

定义一个方法,实现字符串反转,键盘录入一个字符串,调用该方法后,在控制台输出结果 

例如:键盘录入abc,输出结果cba

分析:这里我们调用时就要在该方法中倒着遍历字符串,从str.length-1开始遍历,话不多说,我们看一下代码吧

public class StringDemo4 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str=sc.next();
        fanZhuan(str);
    }
    public static void fanZhuan(String str){
        String result="";
       for(int i=str.length()-1;i>=0;i--){
           char c=str.charAt(i);
           result=result+c;
       }
        System.out.println(result);
    }
}

运行代码如下 

金额转换

将小写的金额转换为大写

这是为了录入一个数字,并判断数字是否有效,如果无效则继续输入

这是将输入的数字的每一位转换为大写

补齐七位数字

将大写数字和单位拼接到一起

下面就是完整的测试代码

public class StringDemo5 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int money=0;
        while(true){
            System.out.println("请输入数字");
            money=sc.nextInt();
            if(money>=0&&money<=9999999){
                break;
            }
            else{
                System.out.println("金额无效");
            }
        }
        String moneyBig="";
        while(true){
            int ge=money%10;
            String bigNumber=getBigNumber(ge);
            moneyBig=bigNumber+moneyBig;
            money=money/10;
            if(money==0){
                break;
            }
        }
        int count=7-moneyBig.length();
        for(int i=0;i<count;i++){
            moneyBig="零"+moneyBig;
        }
        System.out.println(moneyBig);
        String[] arr = {"佰","拾","万","仟","佰","拾","元"};
        String result="";
        for (int i = 0; i < moneyBig.length(); i++) {
            char c=moneyBig.charAt(i);
            result=result+c+arr[i];
        }
        System.out.println(result);
    }
    public static String getBigNumber(int number){
        String[] arr={"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        return arr[number];
    }
}

手机号屏蔽

先介绍两种方法

String substring(int beginindex,int endindex)截取beginindex与endindex中间的

注意:包头不包尾,包左不包右,只有返回值才是截取的数据

String substring(int beginindex)截取到末尾

有了方法那这一题就好办了

 首先获取手机号

截取手机的前三位

截取手机后四位

再进行拼接

最后就是打印result的值了

完整测试代码如下

public class StringDemo6 {
    public static void main(String[] args) {
        //获取一个手机号
        String phoneNumber="19913145208";
        //截取手机号前三位
        String start=phoneNumber.substring(0,3);
        //截取手机号后四位
        String end=phoneNumber.substring(7);
        //拼接
        String result=start+"****"+end;
        //打印
        System.out.println(result);
    }
}

 

这一期就先到这啦,我们下期再见!!!

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力敲代码的小火龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值