一、String

下载API文档: http://www.oracle.com/technetwork/java/javase/downloads/index.html

⚫ String类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用。

1.概述

⚫ java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。

⚫ Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。

String name = "小黑";
String schoolName = "小白";

⚫ String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。

⚫ String变量每次的修改其实都是产生并指向了新的字符串对象。

⚫ 原来的字符串对象都是没有改变的,所以称不可变字符串。

/**目标:了解String类的特点:String类不可变的原理。*/
public class StringDemo1 {public static void main(String[] args) {String name = "传智";name += "教育"; // name = name + "教育"name += "中心";System.out.println(name);}
}

2.创建字符串对象的2种方式

⚫方式一:直接使用“”定义。(推荐方式)

String name = "传智教育";

⚫ 方式二:通过String类的构造器创建对象。

构造器 说明
public String() 创建一个空白字符串对象,不含有任何内容
public String(String original) 根据传入的字符串内容,来创建字符串对象
public String(char[] chs) 根据字符数组的内容,来创建字符串对象
public String(byte[] chs) 根据字节数组的内容,来创建字符串对象

⚫ 以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。

⚫ 通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。

/**目标:String类创建字符串对象的2种方式*/
public class StringDemo2 {public static void main(String[] args) {// 方式一:直接使用双引号得到字符串对象String name = "我爱你中国";System.out.println(name);// 方式二:// 1、public String(): 创建一个空白字符串对象,不含有任何内容 (几乎不用)String s1 = new String(); // s1 = ""System.out.println(s1);// 2、public String(String): 根据传入的字符串内容,来创建字符串对象(几乎不用)String s2 = new String("我是中国人");System.out.println(s2);// 3、public String(char[] c): 根据字符数组的内容,来创建字符串对象char[] chars = {'a' , 'b' , '中', '国'};String s3 = new String(chars);System.out.println(s3);// 4、public String(byte[] b):  根据字节数组的内容,来创建字符串对象byte[] bytes = {97, 98, 99, 65, 66, 67};String s4 = new String(bytes);System.out.println(s4);System.out.println("---------------------------------------");// 以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。// 通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。String ss1 = "abc";String ss2 = "abc";System.out.println(ss1 == ss2);char[] chars1 = {'a' , 'b' , 'c'};String ss3 = new String(chars1);String ss4 = new String(chars1);System.out.println(ss3 == ss4);}
}

3.String常见面试题

public class Test2 {public static void main(String[] args) {String s2 = new String("abc");String s1 = "abc";System.out.println(s1 == s2);}
}

返回false

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

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"

4.常用API-字符串内容比较

字符串的内容比较不适合用“==”比较。

⚫ 推荐使用String类提供的“equals”比较:只关心内容一样即可

方法名 说明
public boolean equals (Object anObject) 将此字符串与指定对象进行比较。只关心字符内容是否一致!
public boolean equalsIgnoreCase (String anotherString) 将此字符串与指定对象进行比较,忽略大小写比较字符串。只关心字符内容是否一致!
import java.util.Scanner;public class StringAPIEqualsDemo4 {public static void main(String[] args) {// 1、正确登录名和密码String okName = "itheima";String okPassword = "123456";// 2、请您输入登录名称和密码Scanner sc = new Scanner(System.in);System.out.println("登录名称:");String name = sc.next();System.out.println("登录密码:");String password = sc.next();// 3、判断用户输入的登录名称和密码与正确的内容是否相等。if(okName.equals(name ) && okPassword.equals(password)){System.out.println("登录成功!");}else {System.out.println("用户名或者密码错误了!");}// 4、忽略大小写比较内容的Api: 一般用于比较验证码这样的业务逻辑String sysCode = "23AdFh";String code1 = "23aDfH";System.out.println(sysCode.equals(code1)); // falseSystem.out.println(sysCode.equalsIgnoreCase(code1)); // true}
}

5.常用API-遍历、替换、截取、分割操作

/**目标:掌握String常用的其他API。*/
public class StringAPIOtherDemo5 {public static void main(String[] args) {// 1、public int length(): 获取字符串的长度String name = "我爱你中国love";System.out.println(name.length());// 2、public char charAt(int index): 获取某个索引位置处的字符char c = name.charAt(1);System.out.println(c);System.out.println("------------遍历字符串中的每个字符--------------");for (int i = 0; i < name.length(); i++) {char ch = name.charAt(i);System.out.println(ch);}// 3、public 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 name2 = "Java是最厉害的编程语言!";//              01234567   89String rs = name2.substring(0, 9);System.out.println(rs);String rs1 = name2.substring(4, 9);System.out.println(rs1);// 5、public String substring(int beginIndex):从当前索引一直截取到末尾String rs2 = name2.substring(4);System.out.println(rs2);// 6、public String replace(CharSequence target, CharSequence replacement)String name3 = "金三胖是最厉害的80后,金三胖棒棒的!我好爱金三胖";String rs3 = name3.replace("金三胖", "***");System.out.println(rs3);// 7、public boolean contains(CharSequence s)System.out.println(name3.contains("金三胖")); // trueSystem.out.println(name3.contains("金二胖")); // false// 8、public boolean startsWith(String prefix)System.out.println(name3.startsWith("金三胖"));System.out.println(name3.startsWith("金三胖是最厉害的"));System.out.println(name3.startsWith("金三胖是最厉害的2"));// 9、public String[] split(String s): 按照某个内容把字符串分割成字符串数组返回。String name4 = "王宝强,贾乃亮,陈羽凡";String[] names = name4.split(",");for (int i = 0; i < names.length; i++) {System.out.println("选择了:" + names[i]);}}
}

6.案例操作

String类开发验证码功能

需求:

⚫ 随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。

分析:

① 定义一个String类型的变量存储验a-zA-Z0-9之间的全部字符。

② 循环5次,随机一个范围内的索引,获取对应字符连接起来即可。

import java.util.Random;/**练习题:使用String完成随机生成5位的验证码。*/
public class StringExec6 {public static void main(String[] args) {// 1、定义可能出现的字符信息String datas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";// 2、循环5次,每次生成一个随机的索引,提取对应的字符连接起来即可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);}
}

模拟用户登录功能

需求:

⚫ 模拟用户登录功能,最多只给三次机会。

分析:

① 系统后台定义好正确的登录名称,密码。

② 使用循环控制三次,让用户输入正确的登录名和密码,判断是否登录成功,登 录成功则不再进行登录;登录失败给出提示,并让用户继续登录。

import java.util.Scanner;/**练习题:模拟用户登录*/
public class StringExec7 {public static void main(String[] args) {// 1、定义正确的登录名称和密码String okLoginName = "admin";String okPassword = "itheima";// 2、定义一个循环,循环3次,让用户登录Scanner sc = new Scanner(System.in);for (int i = 1; i <= 3; i++) {System.out.println("请您输入登录名称:");String loginName = sc.next();System.out.println("请您输入登录密码:");String password = sc.next();// 3、判断登录是否成功!if(okLoginName.equals(loginName)){// 4、判断密码是否正确if(okPassword.equals(password)){System.out.println("登录成功!欢迎进入系统随意浏览~~~~");break;}else {// 密码错误了System.out.println("您的密码不正确!您还剩余" + (3 - i) +"次机会登录!");}}else {System.out.println("您的登录名称不正确!您还剩余" + (3 - i) +"次机会登录!");}}}}

手机号码屏蔽

需求

⚫ 键盘录入一个手机号,将中间四位号码屏蔽,最终效果为:

175****8786

分析

① 键盘录入一个字符串。

② 调用字符串对象的截取API,截取字符串前三位、后四位。

③ 将前三位 连接“****”然后继续连接后四位,输出最终结果即可

import java.util.Scanner;/**练习题:手机号码屏蔽*/
public class StringExec8 {public static void main(String[] args) {// 1、键盘录入一个手机号码Scanner sc = new Scanner(System.in);System.out.println("请您输入您的手机号码:");String tel = sc.next();// 2、截取号码的前三位,后四位    18665666520String before = tel.substring(0, 3); // 0  1  2String after = tel.substring(7);  // 从索引7开始截取到手机号码的末尾String s = before + "****" + after;System.out.println(s);}
}

二、ArrayList

⚫ 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。

⚫ 集合非常适合做元素个数不确定,且要进行增删操作的业务场景。

⚫ 集合还提供了许多丰富、好用的功能,而数组的功能很单一。

ArrayList集合

⚫ ArrayList是集合中的一种,它支持索引。

ArrayList集合的对象获取

构造器 说明
public ArrayList() 创建一个空的集合对象

ArrayList集合添加元素的方法

方法名 说明
public boolean add(E e) 将指定的元素追加到此集合的末尾
public void add(int index,E element) 在此集合中的指定位置插入指定的元素
import java.util.ArrayList;/**目标: 创建ArrayList对象,代表集合容器,往里面添加元素。*/
public class ArrayListDemo1 {public static void main(String[] args) {// 1、创建ArrayList集合的对象ArrayList list = new ArrayList();// 2、添加数据list.add("Java");list.add("Java");list.add("MySQL");list.add("黑马");list.add(23);list.add(23.5);list.add(false);System.out.println(list.add('中'));System.out.println(list);// 3、给指定索引位置插入元素list.add(1, "赵敏");System.out.println(list);}
}

1.泛型支持

泛型概述

⚫ ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。

举例:

⚫ ArrayList<String>:此集合只能操作字符串类型的元素。

⚫ ArrayList<Integer>:此集合只能操作整数类型的元素。

ArrayList list1 = new ArrayList()

集合中只能存储引用类型,不支持基本数据类型。

import java.util.ArrayList;/**目标: 能够使用泛型约束ArrayList集合操作的数据类型*/
public class ArrayListDemo2 {public static void main(String[] args) {// ArrayList<String> list = new ArrayList<String>();ArrayList<String> list = new ArrayList<>(); // JDK 1.7开始,泛型后面的类型申明可以不写list.add("Java");list.add("MySQL");
//        list.add(23);
//        list.add(23.5);ArrayList<Integer> list2 = new ArrayList<>();list2.add(23);list2.add(100);// list2.add("Java");}
}

2.常用API、遍历

import java.util.ArrayList;/**目标:掌握ArrayList集合的常用API*/
public class ArrayListDemo3 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("Java");list.add("Java");list.add("MySQL");list.add("MyBatis");list.add("HTML");// 1、public E get(int index):获取某个索引位置处的元素值String e = list.get(3);System.out.println(e);// 2、public int size():获取集合的大小(元素个数)System.out.println(list.size());// 3、完成集合的遍历for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}// 4、public E remove(int index):删除某个索引位置处的元素值,并返回被删除的元素值System.out.println(list); // [Java, Java, MySQL, MyBatis, HTML]String e2 = list.remove(2);System.out.println(e2);System.out.println(list);// 5、public boolean remove(Object o):直接删除元素值,删除成功返回true,删除失败返回falseSystem.out.println(list.remove("MyBatis"));System.out.println(list);ArrayList<String> list1 = new ArrayList<>();list1.add("Java");list1.add("王宝强");list1.add("Java");list1.add("MySQL");System.out.println(list1);// 只会删除第一次出现的这个元素值,后面的不删除System.out.println(list1.remove("Java"));System.out.println(list1);// 6、public E set(int index,E element):修改某个索引位置处的元素值。String e3 = list1.set(0 , "贾乃亮");System.out.println(e3);System.out.println(list1);}
}

3.案例:遍历并删除元素

需求:

⚫ 某个班级的考试在系统上进行,成绩大致为:98, 77, 66, 89, 79, 50, 100

⚫ 现在需要先把成绩低于80分以下的数据去掉。

分析:

① 定义ArrayList集合存储多名学员的成绩。

② 遍历集合每个元素,如果元素值低于80分,去掉它

从集合后面遍历然后删除,可以避免漏掉元素。

import java.util.ArrayList;/**案例:从集合中遍历元素且删除。*/
public class ArrayListTest4 {public static void main(String[] args) {// 1、创建集合对象:存入学生成绩(98,77,66,89,79,50,100)ArrayList<Integer> scores = new ArrayList<>();scores.add(98);scores.add(77);scores.add(66);scores.add(89);scores.add(79);scores.add(50);scores.add(100);System.out.println(scores);// [98, 77, 66, 89, 79, 50, 100]// [98, 66, 89, 50, 100]//                   i// 1、遍历集合中的每个元素
//        for (int i = 0; i < scores.size(); i++) {
//            int score = scores.get(i);
//            // 2、判断这个分数是否低于80分,如果低于则从集合中删除它
//            if(score < 80){
//                scores.remove(i);
//            }
//        }
//        System.out.println(scores);// [98, 77, 66, 89, 79, 50, 100]// [98,  89, 100]//   ifor (int i = scores.size() - 1; i >= 0 ; i--) {int score = scores.get(i);// 2、判断这个分数是否低于80分,如果低于则从集合中删除它if(score < 80){scores.remove(i);}}System.out.println(scores);}
}

4.案例:存储自定义类型的对象

影片信息在程序中的表示

需求

⚫ 某影院系统需要在后台存储上述三部电影,然后依次展示出来。

分析

① :定义一个电影类,定义一个集合存储电影对象。

② :创建3个电影对象,封装相关数据,把3个对象存入到集合中去。

③ :遍历集合中的3个对象,输出相关信息。

 集合中存储的元素并不是对象本身,而是对象的地址。

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;}
}
import java.util.ArrayList;/**案例:集合存储自定义元素并遍历。需求:定义电影类(名称,分值,演员),创建3个电影对象,代表三部影片,存入集合中并遍历。《肖生克的救赎》, 9.7 , 罗宾斯《霸王别姬》, 9.6 , 张国荣、张丰毅《阿甘正传》, 9.5 , 汤姆.汉克斯*/
public class ArrayListTest5{public static void main(String[] args) {// 1、定义一个电影类:Movie// 2、定义一个ArrayList集合存储这些影片对象。ArrayList<Movie> movies = new ArrayList<>();// 3、创建影片对象封装电影数据,把对象加入到集合中去。
//        Movie m1 = new Movie("《肖生克的救赎》", 9.7 , "罗宾斯");
//        movies.add(m1);movies.add(new Movie("《肖生克的救赎》", 9.7 , "罗宾斯"));movies.add(new Movie("《霸王别姬》", 9.6 , "张国荣、张丰毅"));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());}}
}

5.案例:元素搜索

学生信息系统的数据搜索

需求

⚫ 后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能。

分析

① 定义Student类,定义ArrayList集合存储如上学生对象信息,并遍历展示出来。

② 提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示。

③ 使用死循环,让用户可以不停的搜索。

public class Student {private String studyId;private String name;private int age;private String className;public Student() {}public Student(String studyId, String name, int age, String className) {this.studyId = studyId;this.name = name;this.age = age;this.className = className;}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 getClassName() {return className;}public void setClassName(String className) {this.className = className;}
}
import java.util.ArrayList;
import java.util.Scanner;/**案例:学生信息系统:展示数据,并按照学号完成搜索学生类信息(学号,姓名,性别,班级)测试数据:"20180302","叶孤城",23,"护理一班""20180303","东方不败",23,"推拿二班""20180304","西门吹雪",26,"中药学四班""20180305","梅超风",26,"神经科2班"*/
public class ArrayListTest6 {public static void main(String[] args) {// 1、定义一个学生类,后期用于创建对象封装学生数据// 2、定义一个集合对象用于装学生对象ArrayList<Student> students = new ArrayList<>();students.add(new Student("20180302","叶孤城",23,"护理一班"));students.add(new Student("20180303","东方不败",23,"推拿二班"));students.add(new Student( "20180304","西门吹雪",26,"中药学四班"));students.add(new Student( "20180305","梅超风",26,"神经科2班"));System.out.println("学号\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.getClassName());}// 4、让用户不断的输入学号,可以搜索出该学生对象信息并展示出来(独立成方法)Scanner sc = new Scanner(System.in);while (true) {System.out.println("请您输入要查询的学生的学号:");String id = sc.next();Student s = getStudentByStudyId(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.getClassName());}}}/**根据学号,去集合中找出学生对象并返回。* @param students* @param studyId* @return*/public static Student getStudentByStudyId(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; // 查无此学号!}
}

快捷键:全选代码    CTRL+ALT+T

JavaEE-常用API(String、ArrayLis)相关推荐

  1. java api 第一个类是_JAVA常用API:String 类的常用方法

    字符串是一个对象,有很多方法可以使用 1. length();返回字符串的长度 String str = "abcd"; int len = str.length(); 2. is ...

  2. c++ string replace_JAVA应用程序开发之String类常用API

    [本文详细介绍了JAVA应用开发中的String类常用API,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 API ( Application Interface 应用程序接口)是类中提供的接口, ...

  3. 常用API(Object、String、StringBuffer、用户登陆注册)

    常用API 今日内容介绍 u Object u String u StringBuilder 第1章 Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象 ...

  4. String 常用API

    public static void main(String[] args) {/*** String 常用API* 字符串* 1>截取* 2>替换**/String fileSuffix ...

  5. 【JAVA基础】重新系统学习Java(七)常用API(String、ArrayList)

    目录 常用API(String.ArrayList) String String类概述 创建字符串对象的2种方式 String类常见面试题 String类常用API-字符串内容比较 String类常用 ...

  6. 7.Java常用API(String、ArrayList)

    API(Application Programming Interface, 应用程序编程接口) Java写好的技术(功能代码),可以直接调用 1.String String类定义的变量可以用于存储字 ...

  7. J2SEI:常用API(String,Math)

    什么是API? API(Application Programming,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或 ...

  8. Java核心类库之(常用API、字符串类、集合类、泛型)

    目录 1 常用API 1.1 Math类 1.2 System类 1.3 Object类 1.4 Objects类 1.5 Arrays类 1.6 基本类型包装类 1.6.1 Integer类概述和使 ...

  9. Selenium Web 自动化 - Selenium常用API

    Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作   1.1 用webdriver打开一个浏览器   1.2 最大化浏览器&关闭浏 ...

  10. JavaScript一些常用 API整理汇总

    JavaScript一些常用 API整理汇总 Array new Set() 数组去重 const arr = [3,4,4,5,4,6,5,7]; console.log(new Set(arr)) ...

最新文章

  1. python文件编译_我算是白学Python了,现在才知道原来Python是可以编译的
  2. MySQL——复杂的多表查询——以超市交易数据为例
  3. Lucene下载及测试
  4. 【SD】自定义销售订单审批状态
  5. android jni调用so库
  6. 时隙aloha协议仿真程序_工控ModbusTCP/IP协议仿真环境搭建
  7. android中viewpager+fragment,ViewPager和Fragment一篇就够了
  8. CCF202104-3 DHCP服务器(100分)【模拟】
  9. ALTERA 命名规则
  10. vulkan 利用GPU加速ENet
  11. 关于 System.getProperty
  12. Python黑帽子 黑客与渗透测试编程之道(三)取代netcat
  13. Module `react-native-vector-icons/Ionicons` does not exist in the Haste module map
  14. 搭建开源物联网平台教程
  15. 微信三个平台区分(开放,公众,商户平台)(转)
  16. 海信电视全记录:法国再度闯入世界杯决赛,剑指蝉联冠军
  17. NOIP2015酱油记
  18. 2017CS231n笔记_S11分割,定位,检测
  19. 低通滤波器计算截止评率_科普文|一文了解电阻-电容(RC)低通滤波器
  20. 大局已定,应届生三面京东成功拿下20K的Offer。

热门文章

  1. D2 日报 2019年 03月 13日
  2. 使用 brew 安装mongodb
  3. Scheme语言--简介
  4. Android 封装标题栏
  5. 初探可视化新秀PyG2Plot
  6. 网络适配器出现黄色感叹号!,错误代码56
  7. 12306火车票查询--python
  8. linux 连接打印机
  9. 推荐一款桌面弹窗广告拦截软件【桌面弹窗广告屏蔽】
  10. python seo 外链_用python实现超级外链发布系统