赞
踩
目录
什么是API
API (Application Programming Interface) :应用程序编程接口
java中的API
指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可,我们可以通过帮助文档来学习这些API如何使用。
String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。String 类在 java.lang 包下,所以使用的时候不需要导包!
字符串不可变,它们的值(对象)在创建后不能被更改
虽然 String 的值是不可变的,但是它们可以被共享
字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )
字符串类型,可以定义字符串变量指向字符串对象。
String变量每次的修改其实都是产生并指向了新的字符串对象。
原来的字符串对象都是没有改变的,所以称不可变字符串
常用的构造方法
直接使用“”定义。(推荐方式) String name = "传智教育";
方式二:通过String类的构造器创建对象。
方法名 | 说明 |
---|---|
public String() | 创建一个空白字符串对象,不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
String s = “abc”; | 直接赋值的方式创建字符串对象,内容就是abc |
- package String;
-
- import org.w3c.dom.ls.LSOutput;
-
- public class stringDemo1 {
- public static void main(String[] args) {
- //1直接使用“”定义。(推荐方式)
- String name = "我爱你";
- System.out.println(name);
- //2创建一个空白字符串对象,不含有任何内容
- String s1 = new String();
- System.out.println(s1);
- //3根据传入的字符串内容,来创建字符串对象
- String s2 = new String("我爱你");
- System.out.println(s2);
- //4根据字符数组的内容,来创建字符串对象
- char[] chars = {'a','b','中','国',};//ab中国
- String s3 = new String(chars);
- System.out.println(s3);
- //5根据字节数组的内容,来创建字符串对象
- byte[] bytes = {12,3,4,52,23,};
- String s4 = new String(bytes);
- System.out.println(s4);
- System.out.println("************************");
- //"abc"在字符串常量池;双引号创建的字符串对象,在字符串常量池中存储同一个
- String ss1 = "abc";
- String ss2 = "abc";
- System.out.println(ss1 == ss2);//true
-
- //通过new 构造器创建的字符串对象,在堆内存中分开存储
- char[] chars1 = {'a','b','c'};
- String ss3 = new String(chars1);
- String ss4 = new String(chars1);
- System.out.println(ss3 == ss4);//false
-
- }
- }
1.有什么区别吗?(面试常考)
以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。 通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。
2.
- public class Test2 {
-
- public static void main(String[] args)
-
- { String s2 = new String("abc"); //创建了两个对象
-
- String s1 = "abc";//0个
-
- System.out.println(s1 == s2); } }//false
3.
- public class Test3 {
-
- public static void main(String[] args) {
-
- String s1 = "abc"; String s2 = "ab";
-
- String s3 = s2 + "c";
-
- System.out.println(s1 == s3);}}//false
4.
- public class Test4 {
-
- public static void main(String[] args) {
-
- String s1 = "abc";
-
- String s2 = "a" + "b" + "c";
-
- System.out.println(s1 == s2)}}//true
-
- //Java存在编译优化机制,程序在编译时: “a” + “b” + “c” 会直接转成 "abc"
==号的作用
比较基本数据类型:比较的是具体的值
比较引用数据类型:比较的是对象地址值
equals方法的作用
方法介绍
public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写
示例代码
- package String;
-
- import org.w3c.dom.ls.LSOutput;
-
- import java.util.Scanner;
-
- public class stringDemo2 {
- public static void main(String[] args) {
- String okName = "南辞";
- String okPassword = "123456";
-
- Scanner sc = new Scanner(System.in);
- System.out.println("登录名称:");
- String name = sc.next();
- System.out.println("登录密码: ");
- String password = sc.next();
-
- if(okName.equals(name) && okPassword.equals(password) ){
- System.out.println("登录成功!");
- }else{
- System.out.println("登录失败!");
- }
- String sysCode = "cjnHG";
- String code1 = "CJNhg";
- System.out.println(sysCode.equals(code1));//false
- System.out.println(sysCode.equalsIgnoreCase(code1));//true
-
- }
- }
equalsIgnoreCase不区分大小写
1.如果是字符串比较应该使用使用什么方式进行比较,为什么?
使用String提供的equals方法。 只关心内容一样就返回true。
2、开发中什么时候使用==比较数据 基本数据类型比较时使用
常用API
- package String;
-
- public class stringDemo3 {
- public static void main(String[] args) {
-
- //1 public int length() 返回此字符串的长度
- String name = "我爱你love";
- System.out.println(name.length());//7
- //2 public char charAt(int index) 获取某个索引位置处的字符
- char c = name.charAt(1);
- System.out.println(c);//爱
- //遍历字符串每个字符
- for (int i = 0; i <name.length() ; i++) {
- char ch = name.charAt(i);
- System.out.println(ch);
-
- }
- //3public char[] toCharArray(): 将当前字符串转换成字符数组返回
- char[] chars = name.toCharArray();
- for (int i = 0; i < chars.length; i++) {
- char ch = chars[i];
- System.out.println(ch);
-
- }
- //4 public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包前不包后)
- String rs = name.substring(0,3);
- System.out.println(rs);//我爱你
- //5 public String substring(int beginIndex) 从传入的索引处截取,截取到末尾,得到新的字符串
- String rs1 = name.substring(3);
- System.out.println(rs1);//love
- //6 public String replace(CharSequence target, CharSequence replacement)使用新值,将字符串中的旧值替换,得到新的字符串
- String name2 = "张三是最厉害的,张三喜欢代码,张三喜欢玩";
- String rs3 = name2.replace("张三","李四");
- System.out.println(rs3);//李四是最厉害的,李四喜欢代码,李四喜欢玩
- //7 public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组返回
- String name3 = "张三,李四,王五";
- String[] names = name3.split(",");
- for (int i = 0; i < names.length; i++) {
- System.out.println("选择了:" + names[i]);//选择了:张三,李四,王五
-
- }
- }
- }
String类开发验证码功能
- package String;
-
- import java.util.Random;
-
- public class stringDemo4 {
- public static void main(String[] args) {
- //1.定义可能出现的字符
- String datas = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
-
- //2.循环五次每次生成一个随机的索引连接起来
- String code = "";
- Random r = new Random();
- for (int i = 0; i <5 ; i++) {
- int index = r.nextInt(datas.length());
- char c = datas.charAt(index);
- code +=c;
- }
- //3.输出
- System.out.println(code);
- }
- }
定义一个String类型的变量存储验a-zA-Z0-9之间的全部字符。
循环5次,随机一个范围内的索引,获取对应字符连接起来即可
需求 已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示
- package String;
-
- import java.util.Scanner;
-
- public class stringDemo5 {
- public static void main(String[] args) {
- //1.定义一个用户名密码
- String okName = "8888";
- String okPassword = "6666";
- //2.定义一个循环,三次
- Scanner sc = new Scanner(System.in);//扫描器
- for (int i = 0; i < 3; i++) {
- System.out.println("请输入用户名:");
- String Name = sc.next();
- System.out.println("请输入密码:");
- String passeord = sc.next();
- //3.判断
- if(okName.equals(Name)){
- if(okPassword.equals(passeord)){
- System.out.println("登录成功!");
- break;
- }else{
- //密码错误
- System.out.println("密码错误!您还剩余"+ (2 -11 i) + "次机会");
- }
- }else {
- System.out.println("用户名错误!您还剩余"+ (2 - i) + "次机会");
-
- }
- }
- }
- }
键盘录入一个手机号,将中间四位号码屏蔽
- package String;
-
- import java.util.Scanner;
-
- public class stringDemo6 {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);//扫描器
- System.out.println("请输入您的手机号:");
- String pass = sc.next();
- String pass1 = pass.substring(0,3);
- String pass2 = pass.substring(7);
- String s =pass1 + "****" +pass2 ;
- System.out.println(s);
-
- }
- }
-
键盘录入一个字符串。 ② 调用字符串对象的截取API,截取字符串前三位、后四位。 ③ 将前三位 连接“”然后继续连接后四位,输出最终结果即可
什么是集合
提供一种存储空间可变的存储模型,存储的数据容量可以发生改变
ArrayList集合的特点
底层是数组实现的,长度可以变化
泛型的使用
用于约束集合中存储元素的数据类型
1.数组和集合的元素存储的个数问题?
数组定义后类型确定,长度固定
集合类型可以不固定,大小是可变的。
2、数组和集合适合的场景
数组适合做数据个数和类型确定的场景
集合适合做数据个数不确定,且要做增删元素的场景
构造方法
方法名 | 说明 |
---|---|
public ArrayList() | 创建一个空的集合对象 |
常用API
方法名 | 说明 |
---|---|
public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
public E get(int index) | 返回指定索引处的元素 |
public int size() | 返回集合中的元素的个数 |
public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
示例代码
- package arrlist;
-
- import java.util.ArrayList;
-
- public class ArrlistDemo3 {
- public static void main(String[] args) {
- ArrayList<String> list = new ArrayList();
- list.add("Java");
- list.add("MYSQL");
- list.add("HTML");
- list.add("SJ");
- list.add("MXM");
- //1. public E get(int index) 返回指定索引处的元素
- String e = list.get(3);//SJ
- System.out.println(e);
- //2.public int size() 返回集合中的元素的个数
- System.out.println(list.size());//5
- //3.完成集合遍历
- for (int i = 0; i < list.size(); i++) {
- String rs = list.get(i);
- System.out.println(rs);
- }
- //4. public E remove(int index) 删除指定索引处的元素,返回被删除的元素
- System.out.println(list);
- String rs2 = list.remove(2);
- System.out.println(rs2);//[Java, MYSQL, HTML, SJ, MXM] HTML
- System.out.println(list);//[Java, MYSQL, SJ, MXM]
-
- // 5. public boolean remove(Object o) 删除指定的元素,返回删除是否成功
- list.remove("SJ");
- System.out.println(list);//[Java, MYSQL, MXM]
- // 6. public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
- String rs3 = list.set(1,"Java");
- System.out.println(rs3);//[Java, MYSQL, MXM] MYSQL
- System.out.println(list);//[Java, Java, MXM]
-
- }
- }
ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。
举例: ArrayList<String> :此集合只能操作字符串类型的元素。 ArrayList<Integer>:此集合只能操作整数类型的元素。
- package arrlist;
-
- import java.util.ArrayList;
-
- public class ArrlistDemo2 {
- public static void main(String[] args) {
- ArrayList<String> list = new ArrayList();
- list.add("Java");
- list.add("myaql");
- ArrayList<Integer> list2 = new ArrayList();
- list.add("23");
- list.add("100");
- }
- }
怎么去统一ArrayList集合操作的元素类型? 使用泛型:<数据类型> ArrayList list1 = new ArrayList()
需求: 某个班级的考试在系统上进行,成绩大致为:98, 77, 66, 89, 79, 50, 100
现在需要先把成绩低于80分以下的数据去掉
- package arrlist;
-
- import java.util.ArrayList;
-
- public class ArrlistDemo4 {
- public static void main(String[] args) {
- ArrayList<Integer> scores = new ArrayList<>();
- scores.add(98);
- scores.add(43);
- scores.add(90);
- scores.add(54);
- scores.add(78);
- scores.add(67);
- scores.add(100);
- scores.add(59);
- scores.add(93);
- System.out.println(scores);
- //[98, 43, 90, 54, 78, 67, 100, 59, 93]
- //遍历元素
- //从后往前删除没有BUG
- for (int i = scores.size() - 1; i >= 0; i--) {
- int score = scores.get(i);
- //删除元素
- if (score < 80) {
- scores.remove(i);
- }
- }
- System.out.println(scores);
- }
- }
集合中遍历元素,并筛选出元素删除它,应该怎么解决?
从集合后面遍历然后删除,可以避免漏掉元素
需求 某影院系统需要在后台存储上述三部电影,然后依次展示出来。
- package arrlist;
-
- import java.util.ArrayList;
-
- public class ArrlistDemo5 {
- public static void main(String[] args) {
- //1.定义电影类
- //2.定义Arrlist集合
- ArrayList<Movie> movies = new ArrayList<>();
- //3.创建对象封装数据,把对象加入集合
- Movie m1 = new Movie();
- movies.add(new Movie("《肖生克的救赎》",9.7,"罗宾斯"));
- movies.add(new Movie("《霸王别姬》",9.5,"张国荣"));
- System.out.println(movies);
- //4.遍历对象展示
- for (int i = 0; i < movies.size(); i++) {
- Movie movie = movies.get(i);
- System.out.println("片名" + movie.getName());
- System.out.println("评分" + movie.getScore());
- System.out.println("主演" + movie.getActor());
-
- }
-
- }
- }
- package arrlist;
-
- public class Movie {
- //私有
- private String name;
- private double score;
- private String actor;
-
- public Movie() {
- }
-
- public Movie(String name, double score, String actor) {
- this.name = name;
- this.score = score;
- this.actor = actor;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public double getScore() {
- return score;
- }
-
- public void setScore(double score) {
- this.score = score;
- }
-
- public String getActor() {
- return actor;
- }
-
- public void setActor(String actor) {
- this.actor = actor;
- }
- }
集合中存储的元素并不是对象本身,而是对象的地址
需求 后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能。
- package arrlist;
-
- import java.util.ArrayList;
- import java.util.Scanner;
-
- public class ArrlistDemo6 {
- public static void main(String[] args) {
- //1.定义一个学生类
- //2.定义集合对象用于集合对象
- ArrayList<Student> students = new ArrayList<>();
- students.add(new Student("1","南辞",18,"计科2003"));
- students.add(new Student("2","张三",15,"计科2003"));
- students.add(new Student("3","李四",15,"计科2003"));
- students.add(new Student("4","王五",15,"计科2003"));
- System.out.println("学号\t\t名字\t\t年龄\t\t班级");
- //3.遍历集合展示
- for (int i = 0; i < students.size(); i++) {
- Student s = students.get(i);
- System.out.println(s.getStudyId()+"\t\t"+s.getName() +"\t\t"+s.getAge()+"\t\t"+s.getCalssName());
- }
- //4.用户输入学号,搜索学生对象信息
- Scanner sc = new Scanner(System.in);//扫描器
- while (true) {
- System.out.println("请输入查询学号: ");
- String id = sc.next();//接受数据
- Student s = gtStudentByStudyId(students,id);
- //判断学号是否存在
- if (s == null){
- System.out.println("没有该学生");
- }else{
- System.out.println(s.getStudyId()+"\t\t"+s.getName() +"\t\t"+s.getAge()+"\t\t"+s.getCalssName());
-
- }
- }
- }
- public static Student gtStudentByStudyId(ArrayList<Student> students,String studyId){
- for (int i = 0; i < students.size(); i++) {
- Student s = students.get(i);
- if(s.getStudyId() .equals((studyId))){
- return s;
- }
-
- }
- return null;
- }
- }
- package arrlist;
-
- public class Student {
- private String studyId;
- private String name;
- private int age;
- private String calssName;
-
- public Student() {
- }
-
- public Student(String studyId, String name, int age, String calssName) {
- this.studyId = studyId;
- this.name = name;
- this.age = age;
- this.calssName = calssName;
- }
-
- public String getStudyId() {
- return studyId;
- }
-
- public void setStudyId(String studyId) {
- this.studyId = studyId;
- }
-
- 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;
- }
-
- public String getCalssName() {
- return calssName;
- }
-
- public void setCalssName(String calssName) {
- this.calssName = calssName;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。