字符串
-
API
-
API概述
API(Application Programming Interface):应用程序编程接口
Java API: 指的就是JDK中提供的各种功能的Java类
这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何 即可,我们可以通过帮助文档案来学习这些API如何使用。
-
如何使用帮助文档
- 右键打开该文档
-
找到所有选项卡中的输入框
-
在输入框中输入查找对象,如Random
- 看类在哪个包下
- 看类的描述信息
- 看构造方法
- 看成员方法
-
-
String
-
String 概述
String类在Java.lang包下,所以使用的时候不需要导包
String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都被实现为此类的实例,也就是说,Java程序中所有的双引号字符串都是String类的对象。
字符串的特点
- 字符串不可变,它们的值在创建后不能被更改
- 虽然String的值的不可变的,但是它们可以被共享
- 字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[])
-
String构造方法
方法名 说明 public String() 创建一个空白对象,不含有任何内容 public String(char[] chs) 根据字符数组的内容,来创建字符串对象 public String(byte[] bys) 根据字符数组的内容,来创建字符串对象 String s=“abc”; 直接赋值的方式创建字符串对象,内容就是abc -
String对象的特点
-
通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址不同
char[] chs = {'a', 'b', 'c'}; String s1 = new String(chs); String s2 = new String(chs);
上面的代码中JVM会首先创建一个字符数组,然后每一次new的时候都会有一个新地址,只不过s1和s2操控的字符串内容是相同的
-
以“”方式给出的字符串,只要字符串序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会创建一个String对象,并在字符串池中维护
String s3 = "abc"; String S4 = "abc";
在上面的代码中,针对第一行代码,JVM会建立一个String对象放在字符串池中,并给s3参考;第二行则让s4直接参考字符串池中的String对象,也就是说他们本质上是同一个对象。
-
-
字符串的比较
使用 == 作比较
- 基本类型:比较的是数据值是否相同
- 引用类型:比较的是地址值是否相同
字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫:equals()
-
public boolean equals(Object anObject):将次字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串
package heima02; import java.sql.SQLOutput; public class StringDemo { public static void main(String[] args) { //构造方法的方式得到对象 char[] chs = {'a', 'b', 'c'}; String s1 = new String(chs); String s2 = new String(chs); //直接赋值的方式得到对象 String s3 = "abc"; String s4 = "abc"; //直接赋值的方式得到对象 System.out.println(s1 == s1); System.out.println(s1 == s3); System.out.println(s3 == s4); System.out.println("------------------"); //比较字符串内容是否相同 System.out.println(s1.equals(s2)); System.out.println(s1.equals(s3)); System.out.println(s3.equals(s4)); } }
true false true ------------------ true true true Process finished with exit code 0
-
通过帮助文档查看String中的方法
方法名 说明 public boolean equals(Object anObject) 比较字符串的内容,严格区分大小写(用户名和密码) public char charAt(int index) 返回指定索引出的char值 public int length() 返回此字符串的长度
-
-
StringBuilder
-
StringBuilder概述
如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时又浪费内存空间,而这种操作还不可避免。我们可以通过Java提供的StringBuilder类来解决这个问题。
StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是StringBuilder对象中的内容是可变的。
-
String和StringBuilder的区别:
- String 内容是不可变的
- StringBuilder 内容是可变的
-
StringBuilder构造方法
方法名 说明 public StringBuilder() 创建一个空白可变字符串对象,不含有任何内容 public StringBuilder(String str) 根据字符串的内容来创建可变字符串对象 -
StringBuilder 的添加和反转方法
方法名 说明 public StringBuilder append(任意类型) 添加数据,并返回对象本身 public StringBuilder reverse() 返回相反的字符序列 package heima02; import java.sql.SQLOutput; public class StringDemo { public static void main(String[] args) { //创建对象 StringBuilder sb = new StringBuilder(); //public StringBuilder append(任意类型):添加数据,并返回对象本身 StringBuilder sb2 = sb.append("hello"); System.out.println("sb:" + sb); System.out.println("sb2:" + sb2); System.out.println(sb == sb2); sb.append("hello"); sb.append("world"); sb.append("java"); sb.append(100); } }
//链式编程 sb.append("hello").append("world").append("java").append(100); System.out.println("sb:"+sb); //public StringBuilder reverse():返回相反的字符序列 sb.reverse(); System.out.println("sb:"+sb);
-
StringBuilder 和 String 相互转换
-
String Builder转换为String
public String toString(): 通过toString()就可以实现把StringBuilder 转换为String
-
String转换为StringBuilder
public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder
//创建对象 StringBuilder sb = new StringBuilder(); sb.append("hello"); //String s=sb; //这个是错误的做法 //public String toString(): 通过toString()就可以实现把StringBuilder 转换为String String s=sb.toString(); System.out.println(s); //String转换为StringBuilder String s="hello"; //StringBuilder sb=s;//这个是错误的做法 //public StringBuilder(String s):通过构造方法就可以实现把String转换为StringBuilder StringBuilder sb=new StringBuilder(s); System.out.println(sb);
案例:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法以后在控制台输出结果
例如,键盘录入abc,输出结果cba
package heima02; import java.sql.SQLOutput; import java.util.Scanner; public class StringDemo { public static void main(String[] args) { //键盘录入一个字符串,用Scanner实现 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串"); String line = sc.nextLine(); String s = myReverse(line); System.out.println("s:" + s); } //定义一个方法,实现字符串反转。返回值类型String,参数String s /* 两个明确: 返回值类型:String 参数:String s */ public static String myReverse(String s) { /*StringBuilder sb=new StringBuilder(s); sb.reverse(); String ss=sb.toString(); return ss;*/ return new StringBuilder(s).reverse().toString(); } }
-
-
集合基础
-
集合基础
-
集合概述
集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发送改变
集合类有很多,目前我们先学习一个:ArrayList
ArrayList:
- 可以调整大小的数组实现
- :是一种特殊的数据类型,泛型
-
-
ArrayLIst 构造方法和添加方法
方法名 说明 public ArrayList() 创建一个空的集合对象 public boolean add(E e) 将指定的元素追加到此集合的末尾 public void add(int index,E element) 在此集合中的指定位置插入指定的元素 package heima03; import java.util.ArrayList; public class ArrayListDemo { public static void main(String[] args) { // public ArrayList():创建一个空的集合对象 ArrayList<String> array = new ArrayList<String>(); // public boolean add(E,e):在此集合中的指定位置插入指定的元素 // System.out.println(array.add("hello")); array.add("hello"); array.add("world"); array.add("java"); // public void add(int index,E element):在此集合中的指定位置插入指定的元素 array.add(1, "javase"); // array.add(3,"javase"); System.out.println("array:" + array); } }
-
ArrayList 集合常用方法
方法名 说明 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() 返回集合中元素的个数 package heima03; import java.util.ArrayList; public class ArrayListDemo { public static void main(String[] args) { // public ArrayList():创建一个空的集合对象 ArrayList<String> array = new ArrayList<String>(); //添加元素 array.add("hello"); array.add("world"); array.add("java"); // public boolean remove(Object o)删除指定的元素,返回删除是否成功 // System.out.println(array.remove("world")); // System.out.println(array.remove("javaee")); //public E remove(int index)删除指定索引处的元素,返回被删除的元素 // System.out.println(array.remove(1)); //public E set(int index,E element)修改指定索引处的元素,返回被修改的元素 // System.out.println(array.set(1,"javaee")); // public E get(int index)返回指定索引处的元素 System.out.println(array.get(0)); System.out.println(); System.out.println("array:" + array); } }
案例: 学生管理系统
package StudentSys; /* 学生类 快捷键:Alt + insert 快速创建构造方法和get/set方法 */ public class Student { private String sid; private String name; private String age; private String address; public Student() { } public String getSid() { return sid; } public void setSid(String sid) { this.sid = sid; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Student(String sid, String name, String age, String address) { this.sid = sid; this.name = name; this.age = age; this.address = address; } }
package StudentSys; import com.sun.org.apache.xpath.internal.SourceTree; import com.sun.org.apache.xpath.internal.compiler.PsuedoNames; import java.util.ArrayList; import java.util.Scanner; public class StudentManager { public static void main(String[] args) { ArrayList<Student> array = new ArrayList<Student>(); while (true) { System.out.println("----------欢迎来到学生管理系统----------"); System.out.println("1.添加学生"); System.out.println("2.删除学生"); System.out.println("3.修改学生"); System.out.println("4.查看所有学生"); System.out.println("5.退出"); System.out.println("请输入你的选择"); Scanner sc = new Scanner(System.in); String line = sc.nextLine(); switch (line) { case "1": // System.out.println("添加学生"); addStudent(array); break; case "2": // System.out.println("删除学生"); deleteStudent(array); break; case "3": // System.out.println("修改学生"); updateStudent(array); break; case "4": // System.out.println("查看所有学生"); findAllStudent(array); break; case "5": System.out.println("谢谢使用"); // break; System.exit(0); } } } public static void addStudent(ArrayList<Student> array) { Scanner sc = new Scanner(System.in); String sid; while (true) { System.out.println("请输入学生学号:"); sid = sc.nextLine(); boolean flag = isUsed(array, sid); if (flag) { System.out.println("你输入的学号已经被使用,请重新输入"); }else{ break; } } System.out.println("请输入学生姓名:"); String name = sc.nextLine(); System.out.println("请输入学生年龄:"); String age = sc.nextLine(); System.out.println("请输入学生居住地址:"); String address = sc.nextLine(); Student s = new Student(); s.setSid(sid); s.setName(name); s.setAge(age); s.setAddress(address); array.add(s); System.out.println("添加学生成功"); } public static boolean isUsed(ArrayList<Student> array,String sid){ boolean flag =false; for(int i=0;i<array.size();i++){ Student s=array.get(i); if(s.getSid().equals(sid)){ flag=true; break; } } return flag; } public static void findAllStudent(ArrayList<Student> array) { if(array.size()==0){ System.out.println("无信息,请添加信息再查询"); return; } System.out.println("学号\t\t\t姓名\t\t年龄\t\t居住地"); for(int i=0;i<array.size();i++){ Student s = array.get(i); System.out.println(s.getSid()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getAddress()); } } public static void deleteStudent(ArrayList<Student> arry){ Scanner sc = new Scanner(System.in); System.out.println("请输入你要删除的学生的学会:"); String sid=sc.nextLine(); int index=-1; for(int i=0;i<arry.size();i++){ Student s = arry.get(i); if(s.getSid().equals(sid)){ index=i; // arry.remove(i); break; } } if(index ==-1) { System.out.println("该信息不存在,请重新输入"); }else {arry.remove(index); System.out.println("删除学生成功!"); } } public static void updateStudent(ArrayList<Student> array){ Scanner sc = new Scanner(System.in); System.out.println("请输入你要修改的学生的学号:"); String sid=sc.nextLine(); System.out.println("请输入学生姓名:"); String name=sc.nextLine(); System.out.println("请输入学生年龄:"); String age=sc.nextLine(); System.out.println("请输入学生居住地:"); String address=sc.nextLine(); Student s=new Student(); s.setSid(sid); s.setName(name); s.setAge(age); s.setAddress(address); for(int i=0;i<array.size();i++){ Student student = array.get(i); if(student.getSid().equals(sid)){ array.set(i,s); break; } } System.out.println("修改成功"); } }