7. 字符串和集合(重点)

news2024/9/19 12:48:21

常见API

  • API (全称 Application Programming Interface:应用程序编程接口)
  • 就是别人写好的一些程序,给咱们程序员直接拿去调用即可解决问题的。

1 包

1.1 什么是包?

  • 包是用来分门别类的管理各种不同程序的,类似于文件夹,建包有利于程序的管理和维护。
  • 建包的语法格式:
package com.itheima.javabean;

public class Student {
    // ...
}

1.2 在自己程序中调用其他包下的程序的注意事项

  • 要调用自己所在包下的其他类,可以直接调用。(同一个包下的类,可以直接使用)
  • 要调用其他包下的类,则必须在当前类中导包, 才可以访问!导包格式:import 包名.类名;(idea自动导包)
  • 要调用Java提供的类,也需要先导包才可以使用;但是Java.lang包下的类是不需要我们导包的,可以直接使用。
  • 要调用多个不同包下的类,而这些类名正好一样,此时默认只能导入一个类,另一个类必须带包名访问。

1.3 总结

  1. 声明一个包的关键字是什么?
package com.itheima.javabean;
public class Student {
    // ...
}

  1. 在自己类中调用其他包下的程序的注意事项
  • 要调用自己所在包下的其他类,可以____直接调用_____
  • 要调用其他包下的类,则必须在当前类中____导入其他包____, 才可以访问
  • _____java.lang_____包下的类是不需要我们导包的,可以直接使用。
  • 要调用多个不同包下的类,而这些类名正好一样,此时默认只能导入一个类,另一个类必须____全限定名(带包名)_____访问。

2 String

2.1 概述

2.1.1 String是啥?为什么学习String?
  • String代表字符串对象,可以用来封装字符串数据,并提供了很多操作字符串的方法。
2.1.2 String创建对象封装字符串数据的方式
  • 方式一: Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。
String name = "小黑";
String schoolName = "黑马程序员";
  • 方式二: 调用String类的构造器初始化字符串对象。
构造器说明
public String()创建一个空白字符串对象,不含有任何内容
public String(String original)根据传入的字符串内容,来创建字符串对象
public String(char[] chars)根据字符数组的内容,来创建字符串对象
2.1.3 总结
  1. Java中使用哪个类代表字符串?位于哪个包下
  • java.lang.String
  1. String类创建对象封装字符串数据的方式有几种?
  • 方式一: 直接使用双引号创建 String s = "ABC";
  • 方式二: 使用构造函数创建 String s = new String("ABC")

2.2 常用方法

String提供的操作字符串数据的常用方法
方法名说明
public int length()获取字符串的长度返回(就是字符个数)
public char charAt(int index)获取某个索引位置处的字符返回
public char[] toCharArray():将当前字符串转换成字符数组返回
public boolean equals(Object anObject)判断当前字符串与另一个字符串的内容一样,一样返回true
public boolean equalsIgnoreCase(String anotherString)判断当前字符串与另一个字符串的内容是否一样(忽略大小写)
public String substring(int beginIndex, int endIndex)根据开始和结束索引进行截取,得到新的字符串(包前不包后)
public String substring(int beginIndex)从传入的索引处截取,截取到末尾,得到新的字符串返回
public String replace(CharSequence target, CharSequence replacement)使用新值,将字符串中的旧值替换,得到新的字符串
public boolean contains(CharSequence s)判断字符串中是否包含了某个字符串
public boolean startsWith(String prefix)判断字符串是否以某个字符串内容开头,开头返回true,反之
public String[] split(String regex)把字符串按照某个字符串内容分割,并返回字符串数组回来
  • 对于API, 不要追求一下子全记住, 记得大概, 后面用的多了,自然就记住了

2.3 注意事项

2.3.1 String使用时的注意事项1
  • 只要是以“…”方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份
  • 通过new方式创建字符串对象,每new一次还会产生一个新的对象放在堆内存中
2.3.2 通过" "定义字符串
2.3.3 通过new构造器得到字符串对象
2.3.4 阅读程序并回答问题
2.3.5 String使用时的注意事项2
  • String对象的内容不可改变,被称为不可变字符串对象。
2.3.6 String注意事项: String的对象是不可变字符串对象
  • 注意:只要是以“…”方式写出的字符串对象,会在堆内存中的字符串常量池中存储。
  • 结论:每次试图改变字符串对象实际上是新产生了新的字符串对象了,变量每次都是指向了新的字符串对象,之前字符串对象的内容确实是没有改变的,因此说String的对象是不可变的。
2.3.7 总结
  1. String有哪几点注意事项
  • 只要是以“…”方式写出的字符串对象,
    会存储到字符串常量池,且相同内容的字符串只存储一份
  • 通过new方式创建字符串对象,
    每new一次都会产生一个新的对象放在堆内存中
  • String对象的内容不可改变,被称为不可变字符串对象。

2.4 应用案例

2.4.1 案例1: 完成用户登录
  1. 需求
  • 系统正确的登录名和密码是:itheima/123456,请在控制台开发一个登录界面,接收用户输入的登录名和密码,判断用户是否登录成功,登录成功后展示:“欢迎进入系统!”,即可停止程序**(注意:要求最多给用户三次登录机会)**
  1. 步骤:
  • 开发登录界面,提示用户通过键盘输入登录名和密码。
  • 设计一个登录方法,对用户的登录名和密码进行正确性认证。
  • 根据登录方法返回的认证结果,判断用户是否登录成功。
  • 使用循环控制登录界面最多显示3次。
  • 完整代码:
package com.itheima.b_string;

/**
 * @author: LXHYouth
 * @date: 2024/3/16 21:07
 * @Version:    1.0
 * @Description 控制密码输入次数
 */

import java.util.Scanner;

/*
完成用户登录
    系统正确的登录名和密码是:itheima/123456,
    请在控制台开发一个登录界面,接收用户输入的登录名和密码,
    判断用户是否登录成功,登录成功后展示:“欢迎进入系统!”,即可停止程序(注意:要求最多给用户三次登录机会)
 */
public class Demo7 {
    public static void main(String[] args) {
        // 创建一个扫描器对象
        Scanner scanner= new Scanner(System.in);
        // 定义两个变量, 分别存储键盘输入的用户名和密码
        String username,password;
        System.out.println("黑马系统");
        // 实现最多只能输入三次密码
        for (int i = 0; i < 3; i++) {
            // 存储键盘输入的用户名和密码
            System.out.print("请输入用户名:");
            username=scanner.next();
            System.out.print("请输入密码: ");
            password=scanner.next();
            // 密码正确直接退出程序
            if (username.equals("itheima")&& password.equals("123456")){
                System.out.println("您好, 黑马系统登录成功!!!");
                break;
            }
            // 如果索引等于2, 说明已经输入了三次密码, break跳出循环语句, 并输出密码错误
            if(i==2){
                System.out.println("密码输入次数太多, 请明天重试.");
                break;
            }
            // 提示可输入密码次数
            System.out.println("账号或密码输入错误, 请重新输入, 还有"+(3-i-1)+"次机会.");
        }
    }
}

2.4.2 案例2 使用String来开发验证码。
  1. 需求:
  • 实现随机产生指定位数验证码,验证码的每位可能是数字、大写字母、小写字母。
  1. 分析:
  • 设计一个方法,该方法接收一个整型参数,最终要返回对应位数的随机验证码。
  • 方法内定义2个字符串变量:1个用来记住生成的验证码,1个用来记住要用到的全部字符。
  • 定义for循环控制生成多少位随机字符,每次得到一个字符范围内的随机索引,根据索引提取该字符,把该字符交给code变量连接起来,循环结束后,在循环外返回code即可。
  • 主程序中,调用该方法即可得到随机验证码了。
  • 完整代码:
package com.itheima.b_string;

/**
 * @author: LXHYouth
 * @date: 2024/3/16 21:10
 * @Version:    1.0
 * @Description
 */

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

/*
验证码
    实现随机产生指定位数验证码,验证码的每位可能是数字、大写字母、小写字母。
    String data = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
 */
public class Demo8 {
    public static void main(String[] args){
        // 初始化验证码字符串
        String data = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        // 创建一个扫描器对象
        Scanner scanner=new Scanner(System.in);

        //  创建一个变量用来存储验证码
        int num=0;
        String code="";

        while (true){
            // 提示用户需要多少为验证码
            System.out.print("请输入4~8位验证码: ");
            num=scanner.nextInt();
            if (num<4|| num>8){
                System.out.println("输入错误, 请重新输入. ");
                continue;
            }
            break;
        }
        System.out.println("您需要的"+num+"位验证码为: "+verificationCode(num,data));
    }

    /**
     * @MethodName verificationCode
     * @Author LXHYouth 
     * @Date 2024/3/16 21:10
     * @Param [num, data]
     * @return java.lang.String 
     * @Description 随机出一个需要传入位数的随机验证码
     **/
    public static String verificationCode(int num ,String data){
        String code="";
        // 创建一个随机数对象
        Random random=new Random();
        // 创建一个变量存储随机出来的索引
        int index=random.nextInt();
        for (int i = 0; i < num; i++) {
            index=random.nextInt(data.length());
            code+=data.charAt(index);
        }
        // 返回随机验证码
        return code;
    }
}

3 ArrayList

3.1 快速入门

  • ArrayList<E>
  • 是用的最多、最常见的一种集合。

  • 总结
  1. 集合是什么,有什么特点?
  • 一种容器,用来存储数据的
    = 集合的大小可变
  1. ArrayList是什么? 怎么使用?
  • 是集合中最常用的一种,ArrayList是泛型类,可以约束存储的数据类型。
  • 创建对象,调用无参数构造器初始化对象:public ArrayList();
  • 调用相应的增删改查数据的方法
  1. ArrayList提供了哪些常用方法?
常用方法名说明
public boolean add(E e)将指定的元素添加到此集合的末尾
public void add(int index,E element)在此集合中的指定位置插入指定的元素
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素的个数
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public boolean remove(Object o)删除指定的元素,返回删除是否成功
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素

3.2 综合案例

3.2.1 掌握从容器中找出某些数据并成功删除的技巧
  1. 需求:
  • 现在假如购物车中存储了如下这些商品:Java入门,宁夏枸杞,黑枸杞,人字拖,特级枸杞,枸杞子。现在用户不想买枸杞了,选择了批量删除,请完成该需求。
  1. 分析:
  • 后台使用ArrayList集合表示购物车,存储这些商品名。
    遍历集合中的每个数据,只要这个数据包含了“枸杞”则删除它。
  • 输出集合看是否已经成功删除了全部枸杞数据了。
  • 完整代码:
package com.itheima.c_arraylist;

/**
 * @author: LXHYouth
 * @date: 2024/3/16 21:31
 * @Version:    1.0
 * @Description
 */

import java.util.ArrayList;

/*
删除特例
    现在假如购物车中存储了如下这些商品:Java入门,宁夏枸杞,黑枸杞,人字拖,特级枸杞,枸杞子。
    现在用户不想买枸杞了,选择了批量删除,请完成该需求。

实现方式:
    方式一:每次删除一个数据后,索引-1。
    方式二:从集合后面遍历然后删除,可以避免漏掉元素。
*/
public class Demo2 {
    public static void main(String[] args){
        // 创建一个字符串属性的集合对象
        ArrayList<String> arrayList=new ArrayList<>();
        // 向集合中添加对象
        arrayList.add("Java入门");
        arrayList.add("宁夏枸杞");
        arrayList.add("黑枸杞");
        arrayList.add("人字拖");
        arrayList.add("特级枸杞");
        arrayList.add("枸杞子");
        // 遍历集合, 并打印
        for(int i=0;i<arrayList.size();i++){
            System.out.println(arrayList.get(i));
        }

        // 进行匹配, 含有枸杞的使用 remove方法删除
        System.out.println("删除所有关于枸杞的商品");
        for (int i=0;i<arrayList.size();i++){
            String str=arrayList.get(i);
            if(str.contains("枸杞")){
                arrayList.remove(i);
                i--;
            }
        }
        // 遍历集合, 并打印
        for(int i=0;i<arrayList.size();i++){
            System.out.println(arrayList.get(i));
        }
    }

}

3.2.2 ArrayList的综合案例-模仿外卖系统中的商家系统
  1. 需求
  • 完成菜品的上架、以及菜品信息浏览功能。
  1. 目标
  • 使用所学的ArrayList集合结合面向对象编程实现以上2个需求。
  • 完整代码:
package com.itheima.c_arraylist;

/**
 * @author: LXHYouth
 * @date: 2024/3/16 21:28
 * @Version:    1.0
 * @Description 上菜测试类
 */

/*
综合案例:
    完成菜品的上架、以及菜品信息浏览功能。
细节说明:
    1. 设计一个菜品实体类,至少包含菜品名称、菜品价格两个属性
    2. 在main方法中完成: 菜品创建、保存到集合、遍历打印菜品名称和价格的功能
*/
public class Demo3 {
    public static void main(String[] args) {
        // 创建一个菜品类对象
        Dish dish=new Dish();
        // 创建一个菜品操作类对象
        DishOperator dishOperator=new DishOperator();

        dishOperator.upDish(new Dish("烤乳猪",98));
        dishOperator.upDish(new Dish("烤全羊",300));
        dishOperator.upDish(new Dish("澳洲龙虾",688));
        dishOperator.upDish(new Dish("金枪鱼",1999));

        dishOperator.allPrint();

    }
}

package com.itheima.c_arraylist;

/**
 * @className: Dish
 * @author: LXHYouth
 * @date: 2024/3/13 17:34
 * @Version: 1.0
 * @description:    JavaBean    菜品类
 */
public class Dish {
    // 属性
    private String name;
    private double price;

    // get, set 方法


    public String getName() {
        return name;
    }

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

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public Dish() {
    }

    public Dish(String name, double price) {
        this.name = name;
        this.price = price;
    }
}
 
package com.itheima.c_arraylist;

import java.util.ArrayList;

/**
 * @className: DishOperation
 * @author: LXHYouth
 * @date: 2024/3/13 17:37
 * @Version: 1.0
 * @description:    上菜操作类
 */
public class DishOperator {
    Dish dish;
    public DishOperator(){
    }
    public DishOperator(Dish dish){
        this.dish=dish;
    }

    ArrayList<Dish> list=new ArrayList<>();

    // 创建一个方法 进行菜单上菜
    public void upDish(Dish dish){
//       dish = new Dish();
//        dish.setName(name);
//        dish.setPrice(price);
        list.add(dish);
        System.out.println(dish.getName()+"上菜成功!!!");
    }

    public void allPrint(){
        for (int i=0;i<list.size();i++){
            System.out.print(list.get(i).getName()+" 价格为:");
            System.out.println(list.get(i).getPrice());
        }
    }

}
 

  • 到此教程就结束了.
  • 转载: 请附上本文链接.
  • 如果文章对你有帮助, 可以点赞收藏一下, 以防下次需要可以快速找到.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1522158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电源适配器

电源适配器 1. 选购指南2. 接口测量方法3. 电源接口4. 抗干扰磁环&#xff0c;稳定输出References 1. 选购指南 插头尺度相同&#xff0c;供电电压 (V) 相同&#xff0c;电流 (A) > 原来的电流 (A) INPUT (输入)&#xff0c;OUTPUT (输出) 2. 接口测量方法 3. 电源接口 外…

sqllab第二十五A关通关笔记

知识点&#xff1a; 数值型注入双写绕过 oorranand这里不能用错误注入&#xff08;固定错误回显信息&#xff09;联合注入 测试发现跟25关好像一样&#xff0c;就是过滤了and or # 等东西 构造payload:id1/0 发现成功运算了&#xff0c;这是一个数值型的注入 构造payload:id…

Arthas使用案例(二)

说明&#xff1a;记录一次使用Arthas排查测试环境正在运行的项目BUG&#xff1b; 场景 有一个定时任务&#xff0c;该定时任务是定时去拉取某FTP服务器上的文件&#xff0c;进行备份、读取、解析等一系列操作。 而现在&#xff0c;因为开发环境是Windows&#xff0c; 线上项…

pta上的几个例题

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

9.用FFmpeg测试H.264文件的解码时间

1. Essence of Method 要测试对H.264文件的解码时间&#xff0c;可以使用FFmpeg进行操作。FFmpeg是一个开源的多媒体处理工具&#xff0c;可以用来处理视频和音频文件&#xff0c;包括解码H.264文件。以下是使用FFmpeg的命令行来测试解码时间的方法&#xff1a; ffmpeg -i in…

四连杆机构运动学仿真 | 【Matlab源码+理论公式文本】

【程序简介】&#x1f4bb;&#x1f50d; 本程序通过matlab实现了四连杆机构的运动学仿真编程&#xff0c;动态展现了四连杆机构的运动动画&#xff0c;同时给出了角位移、角速度和角加速度的时程曲线&#xff0c;除了程序本身&#xff0c;还提供了机构运动学公式推导文档&…

更安全的C gets()和str* 以及fgets和strcspn的用法

#include <stdio.h>int main() {char *str;gets(str);puts(str);return(0); }可以说全是错误 首先char *str没有指向一个分配好的地址&#xff0c;就直接读入&#xff0c;危险 ps: 怎么理解char *str "Hello World" 是将一个存储在一个只读的数据段中字符串常…

字符函数以及字符串函数

1.strlen的使用和模拟实现 • 字符串以 \0 作为结束标志&#xff0c;strlen函数返回的是在字符串中 \0 前⾯出现的字符个数&#xff08;不包 含 \0 )。 • 参数指向的字符串必须要以 \0 结束。 • 注意函数的返回值为size_t&#xff0c;是⽆符号的&#xff08; 易错 &#xff…

【C++】了解一下编码

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 1. 前言2. ASCII编码3. unicode4. GBK5. 类型转换 1. 前言 看到string里面还有Template instantiations&#xff1a; string其实是basic_string<char>&#xff0c;它还是一个模板。 再看看wstring&#xff1…

音频的录制及播放

在终端安装好pip install pyaudio&#xff0c;在pycharm中敲入录音的代码&#xff0c;然后点击运行可以在10s内进行录音&#xff0c;录音后的音频会保存在与录音代码同一路径项目中&#xff0c;然后再新建项目敲入播放的代码&#xff0c;点击运行&#xff0c;会把录入的录音进行…

更改el-tabs默认样式,实现tab标签居中显示,标签对应内容使用另一个div显示

首先看效果图 如图所示&#xff0c;标签在浏览器窗口居中&#xff0c;但是下面的内容依然是默认从左到右&#xff0c;不会受到tab样式的影响 <template><div><div style"display: flex; justify-content: center; align-items: center;"><el-…

文献阅读及笔记

每个阶段&#xff0c;该看什么文献 当我们刚开始接触课题时&#xff0c;对这个研究方向一无所知&#xff0c;可以选择硕博学位论文、领域大牛的文献综述当我们已经对课题有了解&#xff0c;处于深化认识的阶段&#xff0c;可以选择行业最新的论文&#xff0c;领域大牛的文献综…

探讨大世界游戏的制作流程及技术——大场景制作技术概况篇

接上文&#xff0c;我们接下来了解一下大世界场景制作技术有哪些&#xff0c;本篇旨在给大家过一遍目前业界的做法&#xff0c;能让大家有一个宏观的知识蓝图。实际上&#xff0c;针对不同的游戏类型和美术风格&#xff0c;制作技术在细节上有着非常大的不同&#xff0c;业界目…

开环端到端自动驾驶: 到底行不行

开环端到端自动驾驶&#xff1a; 到底行不行 附赠全面专业的自动驾驶学习资料&#xff1a;直达链接 TLDR: 别在nuScenes上做开环端到端自动驾驶刷点了。 论文&#xff1a; https://arxiv.org/pdf/2312.03031.pdf github: https://github.com/NVlabs/BEV-Planner 前言 Uni…

set与zset数据类型

set类型基础 redis集合(set)类型和list列表类型类似&#xff0c;都可以用来存储多个字符串元素的 集合。但是和list不同的是set集合当中不允许重复的元素。而且set集合当中元素是没有顺序的&#xff0c;不存在元素下标。 redis的set类型是使用哈希表构造的&#xff0c;因此复…

宠物疾病 与 光线疗法

人类与动物以及大自然是相辅相成的。人离开动物将无法生存&#xff0c;对于动物我们尽力去保护&#xff0c;与大自然和谐稳定生存发展。 生息在地球上的所有动物、在自然太阳光奇妙的作用下、生长发育。太阳光的能量使它们不断进化、繁衍种族。现在、生物能够生存、全仰仗于太…

什么是类加载器

类加载器&#xff08;Class Loader&#xff09;是 Java 虚拟机&#xff08;JVM&#xff09;的重要组成部分&#xff0c;负责将字节码文件加载到内存中并转换为可执行的类。 类加载总共分为以下四种&#xff1a; 启动类加载器&#xff08;Bootstrap Class Loader&#xff09;&…

(二)移植FreeRTOS到STM32中

一、概念 &#xff08;1&#xff09;任务&#xff08;线程&#xff09;&#xff1a;根据功能的不同&#xff0c;将一个系统分割成一个个独立且无法返回的函数&#xff0c;这个函数就被称为任务 &#xff08;2&#xff09;任务栈&#xff1a;静态创建的任务保存在栈中 &#xf…

layui2.9.7-入门初学

下载&#xff1a;https://layui.dev/ 下载后解压&#xff1a; 在hbuider中新建一个项目 将如上解压好的文件打开&#xff0c;复制如下到项目中 写案例&#xff0c;基础学习通之前的bootstrap 那样&#xff0c;挨个相中哪个就测试哪个&#xff0c;在这里不再重复罗列&#x…

刷题日记——三种方法秒杀《最大子串和》(厦大机试)

题目 分析——暴力 两个for循环&#xff0c;计算每一种子序&#xff08;连续&#xff09;和的值&#xff0c;找到最大时的自序起点和终点&#xff0c;输出即可 代码 #include <cstdio> #include <map> #include <string> #include <cmath> #include…