【无标题】

1、String字符串用于定义字符串对象。

直接定义字符串:直接赋值的字符串如果一样,那么一样的字符串会放入串池,下次如果还需要使用难么直接从串池中拿。

例:String str1="Hello world";          String str2="Hello world";

后面str2也是"Hello world"时,str1在赋值时已将字符串放入串池,再给str2赋相同的值时不会再开辟内存存放"Hello world",而是去串池中复用字符串"Hello world"。

2、通过new关键字在堆区开辟内存,存储字符串

例: String str2=new String("hello world");   

就是在堆区开辟一块内存,用于存储字符串。就算内容一样,但只要用new就是在堆区开辟一块新的空间存储这个字符串。

3、直接赋值,没有字符串变量参与运算时,那么这两个变量时是恒等于的。

例:

String str1="abc";
String str2="a"+"b"+"c";
String str3="ab";
String str4=str3+"c";
/*输出true,str2给虚拟机编译之后就将字符串a,b,b合并到一起了,在运行之后,这个str1在赋值"abc",后就将"abc"放入串池,那么str2再赋值"abc"时,就是服用串池中的abc,因此比较的时候就是true*/
System.out.println(str1==str2);
/*输出false,因为有变量参与运算,因为String本身就是一个对象,存放于堆区,有字符串变量参与运算时,那么就在堆区开辟了一块新的内存用以存放字符串。str4就是堆区的地址,因此与str1不同,食醋胡false。*/
System.out.println(str1==str4);

4、equals()      字符串比较

equals()方法是String的成员方法,String类型的所有变量都可以使用。作用就是比较两个String类型变量的内容是否一样。

例:str1.equals(str2) ,如果str1和str2的类容相同,那么返回的结果就是true。

5、length()        字符串长度

length()就是用于统计字符串的长度(即字符串中有多少个单个的字符)。

6、charAt(int index) 括号里面的是字符串的索引,整个方法会返回该字符串中这个索引对应的字符

例:str.charAt(0);      //返回字符串str中0索引位置的字符

7、substring(int beginIndex,int endIndex)    截取

截取字符串中从beginIndex开始到endIndex(不包括endIndex这个索引的字符)结束的字符串。

substring(int beginIndex):默认截取从beginIndex开始到末尾的字符

8、replace(旧值,新值)     将字符串中出现的所有 旧值 替换成 新值。

练习

题1.输入字符串,对每个英文大小写字母统计并输出

        //小写字母
        for (int i = 0; i < 26; i++) {      //遍历二十六个小写字母
            int time = 0;                   //初始化出现的次数为0
            for (int j = 0; j < str.length(); j++) {        //遍历字符串
                if (str.charAt(j) == (char) (i + 97)) {

//当字符串从头到尾,如果有字符等于97+i对应的字符时,这次数++。
//a对应的Ascll码为97,当i=0时,i+97仍然为97,然后转为字符类型就是 'a',再去比较是否相等,第一次的内层循环就是遍历字符串中’a'的个数,第二次循环就是遍统计'b'的个数,
                    
                    time++;
                }
            }
            System.out.println((char) (i + 97) + "有 " + time + "个");
        }
       //大写字母同理,但Ascll码要改为65。

 

题2.输入字符串,分别同届小写字母多少个,大写字母多少个,数字多少个

//通过ascll码去判断三种类型字符的区间,然后遍历字符串,当字符对应在哪个区间,那么对应类型的字符个数就+1
        int capital = 0;    //大写字母次数
        int lowercase = 0;  //小写字母次数
        int number = 0;     //数字次数
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (ch >= 'a' && ch <= 'z') {
                lowercase++;
            } else if (ch >= 'A' && ch <= 'Z') {
                capital++;
            } else if (ch >= '0' && ch <= '9') {
                number++;
            }
        }

 题3.敏感词替换

//将敏感词放入数组,然后遍历输入,将数组中出现的这个词全部替换成****
        String str = scanner.nextLine();
        String[] sensitive={"贱","TMD","SB","cnm"};
        for (int i = 0; i < sensitive.length; i++) {
            str=str.replace(sensitive[i],"*");
        }

题4.以字符串形式输入电话号码,不通过length()来统计字符串长度

//初始定义长度length=0,在字符串后面添加一个电话号码不存在的字符,遍历字符串,如果不是这个特殊字符,那么长度++。但注意的是,必须在判断后面再次判断是否已经是特殊字符了,如果是那么跳出循环。
        String phoneNumber = scanner.nextLine();
        String tempPhoneNumber = phoneNumber + "%";  

        int length = 0;     //定义长度
        while (true) {
            //如果字符不为添加的最后一个字符%,那么就往后移动依次比较
            if (tempPhoneNumber.charAt(length) != '%') {
                length++;
            }
            //倒数第二个不是,但length++之后,这个下标对应字符就是%,则结束循环
            if (tempPhoneNumber.charAt(length) == '%') {
                break;
            }
        }

6.验证邮箱地址

        String emailStr = scanner.nextLine();
        int time = 0;     //定义@符号出现的次数
        for (int i = 0; i < emailStr.length(); i++) {
            if (emailStr.charAt(i) == '@') {
                time++;
            }
        }
        if (time == 1) {
            int index = emailStr.indexOf("@");
            if (index >= 6 && index <= 10) {      //判断@符号出现的地方时候符合邮箱的格式
                System.out.println("您输入的邮箱地址格式正确");
            } else {
                System.out.println("您输入的邮箱地址格式有误");
            }
        } else {
            System.out.println("您输入的不是邮箱地址");
        }

7.账户登录,设定初始账户和密码,限制登录错误的次数

String initialName = "admin";        //账户
        String initialPassword = "123456";   //密码
        for (int i = 0; i < 3; ) {
            System.out.print("请输入用户名:");
            String name = scanner.next();
            System.out.print("请输入密码:");
            String password = scanner.next();
            if (name.equals(initialName) && password.equals(initialPassword)) {
                System.out.println("登陆成功!");
                break;
            } else if (name.equals(initialName) && !password.equals(initialPassword)) {
                System.out.println("密码错误!");
                if (i == 2) {
                    System.out.println("登录已锁定,暂时无法登录!");
                } else {
                    System.out.println("登录失败,您还有" + (2 - i) + "次机会!");
                }
            } else if (!name.equals(initialName) && password.equals(initialPassword)) {
                System.out.println("用户名错误!");
            } else {
                System.out.println("用户名和密码错误!");
            }
            i++;
            if (i==3){
                System.out.println("您的登录次数已用完!");
                break;
            }
        }

8.电话号码屏蔽

        System.out.print("请输入电话号码:");
        String str = scanner.next();
        if (str.length() == 11) {
            String middleStr = str.substring(3, 7);
            str = str.replace(middleStr, "****");
            System.out.println(str);
        } else {
            System.out.println("您输入的电话号码不合规!");
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值