JAVA --String类

API(Application Programming Interface)应用程序编程接口

API就是别人写好的东西,不需要我们自己再去编写,直接使用即可

JavaAPI:就是指在JDK中提供的各种功能的JAVA类,这些类将底层的实现封装起来,我们不需要关心这些类是如何实现的,只需要学习如何使用即可。

Scanner----键盘录入

Random----随机数

字符串

字符串的内容是不会发生改变的,JAVA程序中所有字符串被创建后都被视为String对象,它的对象在创建后不能被更改。如果是通过字符串的拼接,产生的是一个新的字符串。

字符串构造

package com.sstxwd6;
public class stringDemo {
    public static void main(String[] args) {
        //字符串的构造
        //1.使用直接构造
        String s1 = "abcd";
        System.out.println(s1);
        //2.使用new的方式来获取一个字符串对象,调用字符串的构造函数
        //空参构造
        String s2 = new String();//这是一个为任何内容的字符串对象。   ""
        System.out.println(s2);
        //传递一个字符数组,根据字符数组的内容再创建一个新的字符串
        char []chs = {'a','b','c'};
        String s3 = new String(chs);
        System.out.println(s3);
        //传递一个字节数组,根据字节数组的内容再去创建新的字符串对象
        byte[] bytes = {97,98,99,100};//拿这个数字先去ASCII表去查对应的字母,再将其转换
        //应用场景:在网络中传输的数据其实是字节信息,我们一般要将字节信息进行转换,转换成字符串,此时就用到这个构造
        String s4 = new String(bytes);
        System.out.println(s4);// abcd
        
    }
}

不同的字符串构造方法在内存的区别

内存模型

栈内存:方法运行的时候进栈,执行完毕后出栈

堆内存:new出来的对象都在这里,只要是new出来的就是在堆内存中开辟了一个新的空间,传递的是地址

方法区:程序编译出来的字节码文件存放处

String Table(串池)   存储字符串,直接赋值的方式构造的字符串会存储在串池中,使用new关键字构造的就直接在堆内存中了。串池目前在堆内存中

当你使用双引号直接进行字符串赋值时,系统会检查该字符串在串池中是否存在。当不存在时创建新的,存在时传递地址直接复用即可。

当使用new进行构造字符串时,每new一次就会开辟一个新的空间,不会复用!!

只要是创建的是一个类的对象,该对象中存储的是该对象在堆内存中的地址值。

所以使用的构造方法不同,字符串的比较也可能不相等。

字符串的比较

以后如果想比较字符串,一定要使用String类里面的方法equals或者equalsIgnoreCase,不要直接比较,容易出错。

String s1 = "abc";
char []chs = {'a','b','c'};
String s3 = new String(chs);
System.out.println(s1==s3);//false
//比较字符串中的内容是否相同
boolean result1 = s1.equals(s3);//equals在比较时需要完全一样
System.out.println(result1);//true
//比较字符串中的内容是否相同 忽略大小写仅在英文状态下
String s5 = "AbC";
boolean result2 = s1.equalsIgnoreCase(s5);
System.out.println(result2);//true
package com.sstxwd6;

import java.util.Scanner;

public class stringDemo2 {
    public static void main(String[] args) {
        //已知正确的用户名和密码,请用程序实现模拟用户登录。
        // 总共给出三次机会,登录之后给出相应的提示
        String correctUsername = "sstxwd6";
        String correctPassword = "1234567";
        Scanner sc = new Scanner(System.in);
        for (int i = 1; i <= 3; i++) {
            System.out.println("请输入您的用户名:");
            String s1 = sc.next();
            System.out.println("请输入您的密码:");
            String s2 = sc.next();
            //登录界面上是用户名和密码同时判断
            boolean r1 = correctUsername.equals(s1);
            boolean r2 = correctPassword.equals(s2);
            if (r1 && r2) {
                System.out.println("祝您登陆愉快!");
                break;
            }
            if (!r1) {
                if (i == 1) {
                    System.out.println("用户名错误,请重新输入,您还有两次尝试机会");
                    continue;
                } else if (i == 2) {
                    System.out.println("用户名错误,请重新输入,您还有一次尝试机会");
                    continue;
                } else {
                    System.out.println("连续三次错误,请您1分钟后再试");
                    continue;
                }
            } else {
                if (i == 1) {
                    System.out.println("密码错误,请重新输入,您还有两次尝试机会");
                    continue;
                } else if (i == 2) {
                    System.out.println("密码错误,请重新输入,您还有一次尝试机会");
                    continue;
                } else {
                    System.out.println("连续三次错误,请您1分钟后再试");
                    continue;
                }
            }

        }
    }
}

遍历字符串

String类中的方法:

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

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

public String substring(beginIndex,endIndex)  截取字符串中索引从beginIndex到endIndex   包左不包右

public String substring(beginIndex)   默认从beginIndex到最后一个索引

public String replace(旧值,新值)      替换   这里的旧值就是字符串中已经存在的字符串

注意:方法的返回值是替换后的结果

请注意: 在数组中,length是一个属性,索引想获取数组的长度直接使用    数组名.length即可

但在字符串中,length是一个函数,要使用     字符串对象.length()

package com.sstxwd6;

import java.util.Scanner;

public class stringDemo3 {
    //键盘录入一个字符串,并实现字符串的遍历
    public static void main(String[] args) {
        //录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        //实现字符串的遍历
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            System.out.print(c);
        }
    }
}

 字符串中的统计

package com.sstxwd6;
import java.util.Scanner;
public class stringDemo4 {
    //键盘录入一个字符串,统计字符串中大写字符,小写字符,数字字符出现的次数
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        //定义三个计数器
        int bigcount = 0;
        int smallcount = 0;
        int numbercount = 0;
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            //char类型的变量在参与计算的时候自动类型提升为int  查询ASCII码
            if (c>='a'&&c<='z'){
                smallcount++;
            } else if (c>='A'&&c<='Z') {
                bigcount++;
            }else if (c>='0'&&c<='9'){
                numbercount++;
            }
        }
        System.out.println("该字符串中,大写字母有"+bigcount+"个,小写字母有"+smallcount+"个,数字有"+numbercount+"个。");
    }
}

字符串与数组的转换

package com.sstxwd6;
import java.util.Scanner;
public class stringDemo5 {
    //定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串返回
    //调用该方法,并在控制台中输出结果
    public static void main(String[] args) {
        //键盘输入一个数组
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您想要的数组长度");
        int length = sc.nextInt();
        int []arr = new int[length];
        System.out.println("请依次输入您想在数组中存储的整数数据:");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = sc.nextInt();
        }
        System.out.println("接下来进行数组到字符串的转换");
        String str = arrToStr(arr);
        for (int i = 0; i < str.length(); i++) {
            System.out.print(str.charAt(i));
        }
    }
    //该方法首先实现将数组转换成字符串,其中可以使用空字符串的拼接
    public static String arrToStr(int []arr){
        //排除数组是null  和长度为0的情况
        if (arr ==null){
            return null;
        }
        if (arr.length ==0){
            return "[]";
        }
        String str = "[";
        for (int i = 0; i < arr.length; i++) {
            if (i<arr.length-1){
                str=str + arr[i] +",";
            }else {
                str+=arr[i];
            }
        }
        str +="]";
        return str;
    }
}

字符串反转

package com.sstxwd6;

public class stringDemo6 {
    //实现字符串的反转
    //请注意,字符串是不能发生改变的,经过反转后的字符串是新的字符串
    public static void main(String[] args) {
        String str = "abcd638-=";
        String reversalStr = reverse(str);
        for (int i = 0; i < reversalStr.length(); i++) {
            System.out.print(reversalStr.charAt(i));
        }
    }
    public static String reverse(String str){
        String reversalStr = "";
        for (int i = str.length()-1; i >=0 ; i--) {
            reversalStr += str.charAt(i);
        }
        return reversalStr;
    }
}

金额转换

错误写法:

//请注意,该代码结果是错误的,此处记录是为了引以为戒

public class stringDemo7 {
    //金额转换
    //将2135 转换成  零佰零拾零万贰仟壹佰叁拾伍元    共七位
    //将输入的金额每一位分开并填补到7位  0002135  (这里报错!!原因:此时定义的7位的数组为int类型,
    // 将字符串中的字符赋值给数组时,会自动发生类型转换,导致报错)
    //每一位要转成文字大写
    //最后输出字符串的拼接形式
    public static void main(String[] args) {
        String str = "2135";
        //将字符串转为7位的数组
        int []arr = new int[7];
        int num = 7-str.length();//要补的位数
        for (int i = 0; i < arr.length; i++) {
            if (i<num){
                arr[i] = 0;
            }else {  //这步报错,原因是字符型的数字,赋值到int类型,会自动进行类型转换
                arr[i] = str.charAt(i-num);
            }
            System.out.print(arr[i]);
        }

    }
}

 上述代码的解决方案为:

正确写法:arr[i] = str.charAt(i-num);      替换为:  arr[i] = str.charAt(i-num)-48; 利用ASCII码表

package com.sstxwd6;
import java.util.Scanner;

public class stringDemo8 {
    //金额转换
    //将2135 转换成  零佰零拾零万贰仟壹佰叁拾伍元    共七位
    //先将2135转换为大写文字------采用查表法,定义一个数组来存储与索引相对的大写文字,转换时,查表即可
    //最后输出字符串的拼接形式
    public static void main(String[] args) {
        //键盘录入一个金额
        Scanner sc = new Scanner(System.in);
        System.out.println("请录入您的金额:");
        int money;
        while (true) {
            money = sc.nextInt();
            //要判断一下金额是否有效,小于0 或者大于7位的金额均无效
            if(money>0&&money<=9999999){
                break;
            }else {
                System.out.println("该金额无效,请重新输入您的金额:");
            }
        }
        //将金额的每一位都转换为文字大写
        String []arr = new String[7];
          //先将初始化的数组所有元素都转换成大写文字
        for (int i = 0; i < arr.length; i++) {
            arr[i] = getCapitalNumber(0);
        }
          //再进行将金额中每一位数字提取出来后,转换为大写文字,再进行替换
        for (int i = arr.length-1; i>=0&&money>=0; i--) {
            int ge = money%10;
            arr[i] = getCapitalNumber(ge);
            money = money/10;
        }
        System.out.println("您的金额转换为"+arr[0]+"佰"+arr[1]+"拾"+arr[2]+"万"
                +arr[3]+"仟"+arr[4]+"佰"+arr[5]+"拾"+arr[6]+"元");

    }
    //实现一位数字与其文字大写的转换
    public static String getCapitalNumber(int a){
        String []arr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        return arr[a];
    }
}

 手机号屏蔽--包含了字符串的截取

package com.sstxwd6;

import java.util.Scanner;
public class stringDemo9 {
    //键盘录入一个字符串表示手机号,进行手机号的截取
    //手机号11位,前三位不变,后四位不变,中间四位用****来替代
    public static void main(String[] args) {
        //录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一串手机号");
        String str = sc.next();
        //实现字符串的截取,请注意substring方法中前一个表示开始字符,后一个表示结束字符,且包头不包尾
        String topThree = str.substring(0,3);
        String endFour = str.substring(7);
        String newString = topThree +"****"+endFour;
        for (int i = 0; i < newString.length(); i++) {
            System.out.print(newString.charAt(i));
        }
    }
}

敏感词替换---包含字符串的替换

package com.sstxwd6;

public class stringDemo10 {
    //敏感词替换
    public static void main(String[] args) {
        String talk = "菜狗,滚啊,TMD,CNM";
        //定义一个敏感词库
        String[]arr = {"TMD","CNM","SB","滚","菜"};
        //
        for (int i = 0; i < arr.length; i++) {
            talk = talk.replace(arr[i],"***");
        }
        System.out.println(talk);
        }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值