本次学习要求:熟练掌握String的使用方式、String提供的操作字符串数据的常用方法及注意事                               项。

String字符串使用方式(与String相关的都可以直接使用,不用导包):

① 用  “ _ ” 来直接赋值。                    String name = "小明";

② public String() 创建一个空白字符串对象,不含任何内容。        String rs = new String();

③ publi String(String original) 创建一个字符串对象并赋值。         String rs = new String( "java" );

④ public String ( char[ ] chars) 根据字符数组的内容创建字符串。

    char[ ] chars = { '原' , '神','牛','掰'};

    String rs = new String(chars);

    则字符串 rs 中的数据为:原神牛掰。

⑤ public String(byte[ ] bytes) 根据字节数组内容来创建字符串。

    byte[ ]  bytes = {97,98,99};

    String rs = new String(bytes);

   则rs的内容为:abc  (AscⅡ码转换,97~99为a~c)

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

··String提供的操作字符串数据的常用方法:

                                                                           图1

                                                                                图2

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

·String的注意事项:

                                                                        图3

                                                                        图4

其中最需要注意的是:1️⃣String中以" "方式写出来的字符串对象会存储到堆内存的字符串常量池,且相同内容只存储一份;而通过new方式创建的字符串对象,每new一次都会产生一个新的对象置于堆内存中(不在字符串常量池),故即使两者字符串内容完全一致,但一个是" "创建的,另一个是用new创建的,则两者的地址不相同(示例请看图3)。2️⃣编译过程中,当要运算的内容所有值都是明确的(全是常量,没有变量),会触发Java编译优化机制,会自动拼接所有的内容,此时若常量池中已有相关数据则该变量会指向此数据的地址(示例请看图4中的eg3)。

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

                                                    尝试项目1:完成用户登录

需求:系统正确的登录名和密码是:itheima/123456,请在控制台开发一个登录界面,接收用户输入的登录名和密码,判断用户是否登录成功,登录成功后展示:“欢迎进入系统!”,即可停止程序(注意:要求最多给用户三次登录机会)

代码:

package com.itheima.StringWay;

import java.util.Scanner;

public class StringTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入你的用户名");
            String name = sc.next();
            System.out.println("请输入你的密码");
            int password = sc.nextInt();
            boolean equal = StringTestOperator(name,password);
            if(equal){
                break;
            }
        }
    }
    public static boolean StringTestOperator(String name, int password) {
        String truename = "itheima";
        int truepassword = 123456;
        if(truename.equals(name) && truepassword == password){
            System.out.println("欢迎进入系统!");
            return true;
        }else{
            System.out.println("密码或用户名错误!请重试!");
            return false;
        }
    }
}

相关问题:由于刚刚学习了OOP面向对象编程,脑子一时没转过来,使用了面向对象编程的样式                      来写,导致代码过于臃肿。

··何时使用OOP:

1,需要管理数据并且这些数据有对应的操作时。

2,需要保证数据不能被随意修改,必须通过特定方法才能改变时。

3,当多个对象拥有相似的行为但具体实现不同时,使用OOP的继承和多态来实现。

4,需要隐藏内部实现的细节,只对外暴露简单的接口时。

5,项目需求复杂,需要长期维护和扩展时。

———————————————————————————————————————————

                                                尝试项目2:用String开发验证码

需求:使用String来开发验证码,实现随机产生验证码,要求包含随机数数字或大小写字母。

代码:

package com.itheima.StringWay;

import java.util.Random;
import java.util.Scanner;

public class StringTeat2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //确定验证码个数
        System.out.println("请输入所需的验证码个数:");
        int num = sc.nextInt();
        String code = code(num);
        System.out.println("验证码为:" + code);
    }
    //方法用于调取随机验证码
    public static String code(int num){
        //定义一个空的字符串与包含验证码中全部可能出现的元素的字符串
        String code ="";
        String maincode ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random r = new Random();
        for (int i = 0; i < num; i++) {
            //用随机调用获得随机数,再调用此数所在的字符
            int index = r.nextInt(maincode.length());
            code +=maincode.charAt(index);
        }
        return code;
    }
}

相关问题:没有想到String maincode ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";这个方法,导致代码又过于冗长。

当遇到从某个有限且较少的范围内取随机内容时,有两种写法:

1️⃣列出此范围内的所有内容交给数组,用for循环与Random随机数随机置换这个数组里面的元素,最后取首部的任意位元素作为随机取出的内容;

2️⃣将此范围内所有内容交给一个字符串,再定义一个空的字符串,Random 随机出字符串对应位置取此位置的字符赋予空字符串,以此循环,作为随机取出的内容。

更多推荐