String训练

文章讲述了Java编程中的字符串处理技巧,包括字符串到字符数组的转换,数组元素打乱,生成随机验证码,以及字符串长度、字母数字统计,对称字符串判断,身份证号码合法性检查,数组元素拼接等内容。
摘要由CSDN通过智能技术生成

题目一:键盘输入任意字符串,打乱里面的内容

1、字符串是不可变的

2、如果要变化需要变成字符数组

3、调整完毕之后再变回字符串

//注意字符串与字符数组的来回转换,以及Random的运用
public class Test {
    public static void main(String[] args) {
       
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();

        //把字符串变成字符数组
        char[] arr = str.toCharArray();

        //将数组里面的内容打乱
        //打乱的核心要素:
        //遍历数组得到每一个元素与每一个随机索引处的数据进行交换
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            int index = r.nextInt(arr.length);
            char temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }

        //将字符数组再变回字符串
        String newStr = new String(arr);

        //输出打印
        System.out.println(newStr);

    }
}

题目二:生成验证码,内容:可以是小写字母,也可以是大写字母,还可以是数字

规则:

长度为5

内容中是四位字母,1位数字。

其中数字只有1位,但是可以出现在任意的位置。

答案

public class Test {
    public static void main(String[] args) {
        //1.大写字母和小写字母都放到数组当中
        char[] chs = new char[52];
        for (int i = 0; i < chs.length; i++) {
            //ASCII码表
            if(i <= 25){
                //添加小写字母
                chs[i] = (char)(97 + i);
            }else{//27
                //添加大写字母
                // A --- 65
                chs[i] = (char)(65 + i - 26);
            }
        }

        //定义一个字符串类型的变量,用来记录最终的结果
        String code = "";

        //2.随机抽取4次
        //随机抽取数组中的索引
        Random r = new Random();
        for (int i = 0; i < 4; i++) {
            int randomIndex = r.nextInt(chs.length);
            //利用随机索引,获取对应的元素
            //System.out.println(chs[randomIndex]);
            code = code + chs[randomIndex];
        }
        //System.out.println(result);
        //3.随机抽取一个数字0~9
        int number = r.nextInt(10);
        //生成最终的结果
        code = code + number;


        //4.变成字符数组打乱数据
        char[] arr = code.toCharArray();
        //将数组里面的内容打乱
        for (int i = 0; i < arr.length; i++) {
            int index = r.nextInt(arr.length);
            char temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }

        //将字符数组再变回字符串
        String result = new String(arr);

        //输出打印
        System.out.println(result);

    }
}

 题目三:请编写程序,由键盘录入一个字符串,统计字符串中英文字母和数字分别有多少个。

注意ASC码表中A,a对应的值!!
import java.util.Scanner;

public class work {
    public static void main(String[] args) {
       Scanner sc=new Scanner(System.in);
        System.out.println("请输入字符串");
        String str=sc.next();
        char c;
        int Count=0;
        int number=0;
        for (int i = 0; i <str.length() ; i++) {
            c=str.charAt(i);
            if (c>='A'&&c<='z'){
                Count++;
            }else if(c>='0'&&c<='9'){
                number++;
            }

        }
        System.out.println("字母的个数是"+Count+"数字的个数是"+number);


        }


        }

 题目四:请定义一个方法用于判断一个字符串是否是对称的字符串,并在主方法中测试方法。

import java.util.Scanner;

public class work{
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str=sc.next();
        StringBuilder sb=new StringBuilder(str);
        String result=sb.reverse().toString();
        System.out.println(str.equals(result));

    }
}

 方法二

public class Test {
    public static void main(String[] args) {
        String str = "上海自来水来自海上";
        System.out.println(isSym(str));
    }

    public static boolean isSym(String str) {
        // 为了程序的健壮,如果传递的是空值,返回false
        if (str == null) {
            return false;
        }
        // 转换为StringBuilder
        StringBuilder sb = new StringBuilder(str);
        // 反转,再转成String
        String reStr = sb.reverse().toString();
        // 比较与原字符串是否相等
        // 相等返回true,不相等返回false,正好与equals的返回值一致,直接返回即可。
        return reStr.equals(str);
    }
}

题目五:我国的居民身份证号码,由由十七位数字本体码和一位数字校验码组成。请定义方法判断用户输入的身份证号码是否合法,并在主方法中调用方法测试结果。规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X。

步骤

1、定义方法,返回值类型为boolean表示是否合法,参数列表为String类型的id,表示要判断的数据。

2、对每种不符合条件的情况作出判断

​ 2.1、如果字符串长度不是18,返回false。

​ 2.2、如果字符串以数字"0"开头,返回false。

​ 2.3、遍历字符串,获取每一位字符,判断前17位,如果不是数字,返回false,判断最后一位如果不是数字或者X,返回false

​ 2.4、所以的不符合条件都筛选完成,返回true

3、在主方法中创建键盘录入Scanner对象,调用nextLine()方法,获取用户输入,调用方法,传递参数,查看结果。要多运行几次,判断各种不符合条件的数据。

import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入身份证号:");
        String id = sc.nextLine();
        System.out.println(check(id));
    }

    // 返回值boolean类型,表示是否符合规则。参数列表:需要判断的字符串
    public static boolean check(String id) {
        // 如果传递了空参数,返回false
        if (id == null) {
            return false;
        }
        // 如果是数字0开头,返回false
        if (id.startsWith("0")) {
            return false;
        }
        // 如果不是18位,返回false
        if (id.length() != 18) {
            return false;
        }
        // 遍历判断每一位
        for (int i = 0; i < id.length(); i++) {
            char ch = id.charAt(i);
            // 前17位都是数字,最后一位可以是数字或者大写字母X
            if (i == id.length() - 1) { // 最后一位
                if (ch < '0' || ch > '9' && ch != 'X') { // 不是数字或者X
                    return false;
                }
            } else { // 其他位
                if (ch < '0' || ch > '9') { // 不是数字
                    return false;
                }
            }
        }
        // 所有的规则都符合,返回true
        return true;
    }
}

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

要求:

​ 1、如果传递的参数为空,返回null

​ 2、如果传递的数组元素个数为0,返回[]

​ 3、如果数组为int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]

提示

1、定义方法的返回值是什么?参数列表是什么?

2、如果不做判断就对数组进行遍历,那么如果数组对象为空,会报出异常,怎样避免空指针异常呢?

3、拼接字符串必然涉及到频繁改变,该采用可变的字符序列StringBuilder比较好

4、遍历数组,按照题目格式拼接数组中的元素。

5、将字符串返回

6、在主方法中定义数组,并调用方法,打印结果

步骤

1、定义方法返回值类型:String,参数:int[] arr

2、判断对象如果为null,直接返回null

3、创建StringBuilder对象

4、遍历数组,按照要求进行拼接数组元素,如果是不是最后一个元素,还要拼接逗号和空格

5、将StringBuilder转为String返回

6、在主方法中定义数组,并调用方法,打印结果

方法1

public class Test {
    public static void main(String[] args) {
        // 定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
        int[] arr = {1, 2, 3};
        // 调用方法,输出结果
        System.out.println(arrayToString(arr));
    }

    /*定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回
		返回值类型:String
		参数:int[] arr
     */
    public static String arrayToString(int[] arr) {
        // 健壮性判断
        if (arr == null) {
            return null;
        }
        //在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            // 拼接元素
            sb.append(arr[i]);
            // 如果不是最后一个元素,再拼接逗号和空格
            if (i != arr.length - 1) {
                sb.append(", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }
}

方法二:利用StringJoiner 

public class Test {
    public static void main(String[] args) {
        // 定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
        int[] arr = {1, 2, 3};
        // 调用方法,输出结果
        System.out.println(arrayToString(arr));
    }


    public static String arrayToString(int[] arr) {
        // 健壮性判断
        if (arr == null) {
            return null;
        }
        //在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
        StringJoiner sj = new StringJoiner(", ","[","]");
        for (int i = 0; i < arr.length; i++) {
            sj.add(arr[i] + "");
        }
        return sj.toString();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值