指JDK中提供的各种功能的java类
(1)ToString 重写此方法 可以直接右键 get ToString (2)equals 指示其他某个对象是否与此对象相等(基本类型:值是否相等,引用类型:地址值是否相等) 这个方法默认比的是地址值(意义不大),也需要重写一般用来比较对象的成员变量值是否相等 字符串的equals()方法是比较字符串的内容是否相等 可以直接右键 get (3)clone 创建并返回此对象的一个副本 创建的副本与原对象不在一个内存
用于获取用户的键盘输入 构造方法:public Scanner(InputStream source) System类下有一个静态的字段:public static final InputStream in “标准”输入流。 该流已经打开,该流对应于键盘输入或由主机环境或用户指定的另一个输入源。
基本格式 (1)hasNextXxx() 判断是否还有下一个输入项 (2)nextXxx() 获取下一个输入项 默认情况下,Scanner使用空格,回车符作为分隔符 nextLine()获取一个String类型的值
容易出现的问题及解决方法: 先获取一个数值,再获取一个字符串,后面的会把回车符\n获取为字符串,及换行符的问题 解决方法:把所有的数都先按照字符串读取,然后要什么再对应的转换成什么
字符串是常量 构造方法: (1)public String(byte[] bytes) :把字节数组转成字符串 (2)public String(byte[] byte,int index,int length) :把字节数组的一部分转成字符串 (3)public String(char[] value) :把字符数组转成字符串 (4)public String(char[] value,int index,int length) :把字符数组的一部分转成字符串 (5)public String(String original) :把字符串常量转成字符串
判断功能
boolean equals(Object obj) :比较字符串的内容是否相同,区分大小写 boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写 boolean contains(String str):判断大字符串中是否包含小字符串 boolean startsWith(String str):判断字符串是否以某个指定的字符串开头 boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾 boolean isEmpty():判断字符串内容是否为空
获取功能
int length():获取字符串的长度 char charAt(int index):获取指定索引位置的字符 int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引(int类型的原因是'a'和97都可以代表'a') int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引 int indexOf(int ch, int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引 int indexOf(String str, int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引 String substring(int start):从指定位置开始截取字符串,默认到末尾 String substring(int start,int end):从指定位置开始到指定位置结束截取字符串
转换功能
byte[] getBytes():把字符串转换为字节数组 char[] toCharArray():把字符串转换为字符数组 static String valueOf(char[] chs):把字符数组转换成字符串 static String valueOf(int i):把int类型的数据转成字符串 注:String类的valueOf方法可以把任意类型的数据转换成字符串 String toLowerCase():把字符串转成小写 String toUpperCase():把字符串转成大写 String concat(String str):把字符串拼接
其他功能
String replace(char old,char new):替换功能 String replace(String old,String new) String trim() :去除字符串两端空格 int compareTo(String str):按字典顺序比较两个字符串 int compareToIgnoreCase(String str)
字符串的方法:public int length():返回字符串的长度
字符串一旦赋值就不能改变,但是s+="world"这种并不属于 String类重写了equals()方法,比较的是内容是否相同
String的转换功能,获取功能,判断功能,替换功能String作为参数传递,(即便是引用类型)效果和基本类型作为参数传递是一样的
String字面值对象和构造方法创建对象的区别:前者会创建2个对象,后者创建1个对象
实现一个用户名和密码检验功能
import java.util.Scanner; public class StringTeat { public static void main(String[] args) { //定义用户名和密码 String username = "admin"; String password = "admin"; //给三次机会 for(int x=0;x<3;x++) { //键盘录入用户名和密码 Scanner sc = new Scanner(System.in ); System.out.println("请输入用户名:"); String name = sc.nextLine(); System.out.println("请输入密码:"); String pwd = sc.nextLine(); //比较用户名和密码 if (name.equals(username) && pwd.equals(password)) { //如果都相同,则登陆成功 System.out.println("登陆成功"); break; }else { //如果有一个不同,则登录不成功 //如果是第0次,应该换一种提示 if((2-x) == 0) { System.out.println("账号被锁定"); }else { System.out.println("登陆失败,你还有"+(2-x)+"次机会"); } } } } }线程安全的可变字符序列(即字符串),一个类似于String的字符缓冲区,但不能修改 线程安全(多线程讲解): 安全--同步--数据是安全的 不安全--不同步--效率高一点
StringBuffer和String的区别: (1)前者长度和内容可变,后者不可变 (2)如果使用前者做字符串的拼接,不会浪费太多的资源
StringBuffer的构造方法: (1)public StringBuffer():无参构造方法 (2)public StringBuffer(int capacity):指定容量的字符串缓冲对象( 容量为理论值,长度为实际值) (3)public StringBuffer(String str):指定字符串的字符串缓冲区对象
StringBuffer的添加功能: (1)public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身 (2)public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身 StringBuffer的删除功能 (1)public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身 (2)public StringBuffer delete(int start,int end):删除从指定位置开始,指定位置结束的内容,并返回本身 StringBuffer替换功能 (1)public StringBuffer replace(int start,int end,String str):从start开始到end用str替换 StringBuffer翻转功能 (1)public StringBuffer reverse() StringBuffer截取功能(返回值是String类型,本身没有发生改变) (1)public String substring(int start) (2)public String substring(int start,int end)
StringBuffer把数组拼接成一个字符串
public class StringBufferTest2 { public static void main(String[] args) { int[] arr = {44,33,55,11,22}; String s = arrayToString2(arr); System.out.println("s:"+s); } //把数组拼接成一个字符串 public static String arrayToString2(int[] arr) { StringBuffer sb = new StringBuffer(); sb.append("["); for (int i=0; i<arr.length;i++) { if (i==arr.length-1) { sb.append(arr[i]); }else { sb.append(arr[i]).append(","); } } sb.append("]"); return sb.toString(); } }StringBuffer反转
import java.util.Scanner; public class StringBufferTest3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入数据:"); String s = sc.nextLine(); String s1 = myReverse2(s); System.out.println("s1:"+s1); } public static String myReverse2(String s) { return new StringBuffer(s).reverse().toString(); } }判断一个字符串是否是对称的
import java.util.Scanner; public class StringBufferTest4 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String s = sc.nextLine(); boolean b = isSame(s); System.out.println("b:"+b); } public static boolean isSame(String s) { return new StringBuffer(s).reverse().toString().equals(s); } /* public static boolean isSame(String s) { //把字符串转成字符数组 char[] chs = s.toCharArray(); boolean flag = true; for (int start = 0, end = chs.length - 1; start <= end; start++, end--) { if(chs[start] != chs[end]) { flag =false; break; } } return flag; } */ }String,StringBuffer, StringBuilder的区别: (1)String内容是不可变的,StringBuffer和StringBuilder内容都是可变的 (2)StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高
StringBuffer和数组的区别: 二者都可以看出是一个容器,装其他的数据。但是,StringBuffer的数据是一个字符串数据 而数组可以放置多种数据,但必须是同一种数据类型的
