【Java习题】-练习题- 面向对象之字符串与正则表达式习题day15

本文通过实例展示了Java编程中字符串处理的各种方法,包括创建Student对象数组,查询学生信息,计算平均年龄等。此外,还涉及了字符串出现次数最多字符的查找以及EAN-13条码验证。内容涵盖了接口使用、字符串操作和算法应用。
摘要由CSDN通过智能技术生成

1、【难】如下字符串:01#张三#2002#李四#1803#王五#2204#赵六#2005#田七#21

  • 创建Student类,属性:学号 姓名 年龄

  • 1.将这些Student对象放进数组中

  • 2.查询里面有没有叫田七的学生如果存在则打印学生的具体信息(封装成方法,键盘输入姓名)

  • 3.计算所有学生的平均年龄,最大年龄,最小年龄

  • 4.如果存在名字叫张三的将名字改为张兵

package expression.practice;

import java.util.Arrays;
import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //1.将这些Student对象放进数组中
        Student[] students = getData();
        System.out.println(Arrays.toString(students));
        //2.查询里面有没有叫田七的学生如果存在则打印学生的具体信息(封装成方法,键盘输入姓名)
        System.out.println("请输入学生的姓名:");
        printStudentInfo(students,scanner.next());
        //3.计算所有学生的平均年龄,最大年龄,最小年龄
        queue(students);
        getValue(students);
        //4.如果存在名字叫张三的将名字改为张兵
        change(students);
        System.out.println(Arrays.toString(students));


    }

    public static Student[] getData() {
        String string = "01#张三#20*02#李四#18*03#王五#22*04#赵六#20*05#田七#21";
        String[] strings = string.split("\\*");

        Student[] students = new Student[strings.length];

        for (int i = 0; i < strings.length; i++) {
            String[] strings1 = strings[i].split("#");
            Student student = new Student(strings1[0],strings1[1],Integer.parseInt(strings1[2]));
            students[i]=student;
        }
        return students;
    }

    public static void printStudentInfo(Student[] student,String name){
        for (int i = 0; i < student.length; i++) {
            if (student[i].getName().equals(name)){
                System.out.println(student[i].toString());
                return;
            }
        }
        System.out.println("没有叫田七的同学");
    }

    public static void queue(Student[] students){
        for (int i = 0; i < students.length-1; i++) {
            for (int j = 0; j < students.length-1-i; j++) {
                if (students[j].compareTo(students[j+1])>0){
                    Student t = students[j];
                    students[j]=students[j+1];
                    students[j+1]=t;
                }
            }
        }
    }

    public static void getValue(Student[] students){
        System.out.println("最大年龄是:"+students[students.length-1].getAge());
        System.out.println("最大年龄是:"+students[0].getAge());
        double sum = 0;
        for (Student student : students) {
            sum+=student.getAge();
        }
        System.out.println("平均年龄是:"+sum/students.length);
    }

    public static void change(Student[] students){
        for (int i = 0; i < students.length; i++) {
            if (students[i].getName().equals("张三")){
                students[i].setName("张兵");
                return;
            }
        }
        System.out.println("没有叫张三的");
    }

}


interface MyComparable{
    public int compareTo(Object o);
}

class Student implements MyComparable {
    private String ID;
    private String name;
    private int age;

    public Student() {
    }

    @Override
    public int compareTo(Object o) {
        if (!(o instanceof Student)){
            throw new ClassCastException("不是stu对象");
        }
        Student student = (Student) o;
        return this.age-student.age;
    }

    public Student(String ID, String name, int age) {
        this.ID = ID;
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "ID='" + ID + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public String getID() {
        return ID;
    }

    public void setID(String ID) {
        this.ID = ID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

总结:此题考查的就是接口、匿名内部类的知识。

2、【难】从控制台输入一个字符串,记录出现次数最多的字符,并输出这个字符出现了多少次

package expression.practice;

import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String string = scanner.next();
        char[] chars = string.toCharArray();
        int maxcount = 0;
        int count = 1;
        char maxchar = ' ';
        int index;
        for (int i = 0; i < chars.length; i++) {
            index = i;

            for (int j = i+1; j < chars.length; j++) {
                if (chars[index] == chars[j]){
                    count++;
                }

                if (chars[index]!=chars[j]){
                    if (maxcount<count){
                        maxcount=count;
                        maxchar=chars[index];
                    }
                    count=1;
                }
            }
        }
        System.out.println("出现次数最多的字符为:"+maxchar+"出现的次数为:"+maxcount);



    }
}

总结:此题考查其实就是字符串的常用的非静态方法与逻辑上的想法。

3、验证ean-13条码的验证码是否正确

     String code = "6921168509256";

     取前12位的奇数位的和

     取前12位的偶数位的和

    将"奇数位和"与"偶数位和的三倍"相加求和

     取和的个位数,然后用10减去这个个位数,相减的结果就是条码的验证码

    如果条码的第13位数字和这个验证码相同就说明验证码正确

   此题示例代码如下:

package com.homework.task;
/**
 * 1. 验证ean-13条码的验证码是否正确
 * String code = "6921168509256";
 * 取前12位的奇数位的和
 * 取前12位的偶数位的和
 * 将"奇数位和"与"偶数位和的三倍"相加求和
 * 取和的个位数,然后用10减去这个个位数,相减的结果就是条码的验证码
 * 如果条码的第13位数字和这个验证码相同就说明验证码正确
 */
public class BigData01 {
    public static void main(String[] args) {
        String code = "1238";

        int sum1 = 0;
        int sum2 = 0;
        int count = 1;
        int a = Integer.parseInt(code);
        int t = a%10;
        while(a!=0){
            a = a/10;
            t = a%10;
            if (count%2==1){
                sum1+=t;
            }
            if (count%2==0){
                sum2+=t;
            }
            count++;
        }
        System.out.println("奇位数 = "+sum1);
        System.out.println("偶位数 = "+sum2);


        int num = sum1+sum2*sum2*sum2;
        int aa = num%10;
        int aaa = 10-aa;
        System.out.println("aaa = "+aaa);
        int q = Integer.parseInt(code);
        if (aaa == q%10){
            System.out.println("验证码正确");
        }

    }
}

4、【难】给定一个长度,生成一个指定长度的字符串,这个字符串由随机的字母、数字或下划线组成。(不用必须同时包含字母、数字、下划线)

 private static String get(int length) {
        String data = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890_";
        Random random = new Random();
        String str = "";
        for (int i = 0; i < data.length; i++) {
            str = str.concat(String.valueOf(data.charAt(random.nextInt(data.length()))));
        }
        return str;
}

 Note:此题主要考察了字符串与常用类的结合运用。

5、【中】将一个字符串中最后一次出现的指定字符替换成大小写翻转的字符。 replace("hello", 'l') -> helLo replace("HELLO", 'L') -> HELlO

package com.homework.task;

import java.util.Scanner;

/**
 * 【中】将一个字符串中最后一次出现的指定字符替换成大小写翻转的字符。
 */
public class BigData03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String string = scanner.next();
        System.out.println(string);
        char[] ch = string.toCharArray();
        System.out.println("请输入指定的字符:");
        String s = scanner.next();

        char c = s.charAt(0);
        System.out.println(c);

        int index = string.lastIndexOf(c);
        if (ch[index]>='a'&&ch[index]<='z'){
            c-=32;
        }
        if (ch[index]>='A'&&ch[index]<='Z'){
            c+=32;
        }

        StringBuffer stringBuffer = new StringBuffer(new String(ch));
        stringBuffer.setCharAt(index, c);
        System.out.println(stringBuffer);


    }
}

Note: 从控制台输入的字符串其实其本身无法改变,只有借助StringBuffer类对象实现对字符串的改变。StringBuffer类不是一个字符串类,而是一个操作字符串的类。

6、已知字符串:"this is a test of java". 按要求执行以下操作:

(1) 【简】统计该字符串中字母s出现的次数

(2) 【简】取出子字符串"test"

(3) 【简】将本字符串复制到一个字符数组Char[] str中.

(4) 【中】将字符串中每个单词的第一个字母变成大写, 输出到控制台。

package com.homework.task;


/**
 * 4. 已知字符串:"this is a test of java". 按要求执行以下操作:
 * (1) 【简】统计该字符串中字母s出现的次数
 * (2) 【简】取出子字符串"test"
 * (3) 【简】将本字符串复制到一个字符数组Char[] str中.
 * (4) 【中】将字符串中每个单词的第一个字母变成大写, 输出到控制台。
 */
public class BigData04 {
    public static void main(String[] args) {
        //(1) 【简】统计该字符串中字母s出现的次数
        String string = "this is a test of java";
        char[] ch = string.toCharArray();
        int count = 0;
        for (int i = 0; i < ch.length; i++) {
            if (ch[i]=='s'){
                count++;
            }
        }
        //(2) 【简】取出子字符串"test"
        String[] string1 = string.split(" +");
        String s = null;
        for (int i = 0; i < string1.length; i++) {
            if (string1[i].equals("test")){
//                s = "test";
                s = new String(string1[i]);
            }
        }
        System.out.println(s);
        //(3) 【简】将本字符串复制到一个字符数组Char[] str中.
        char[] str1 = s.toCharArray();
        //(4) 【中】将字符串中每个单词的第一个字母变成大写, 输出到控制台。
        System.out.println(new String(str1));


    }
}

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值