可变参数
可变参数 : 关于形参的一种编写方式
在方法的形参上定义可变参数 -> 数据类型...变量名
可变参数的本质就是一个数组
注意事项:
1. 如果方法的形参定义了可变参数,那么调用方法时可以传入任意个此类型的实参!
2. 可变参数的后面不可以有任何类型的形参
3. 可变参数的前可以有任意类型的形参
API的概述
API : Application Programming Interface -> 应用程序编程接口
API 提供了后续编写Java代码的规范!! --> 学习Java的词典!!
学词典 -> 会用!! 会查词典!
API的使用
Random的种子
Random(long seed) : 带有种子的 随机数对象生成
种子的功能 :
让同一颗种子的每一次随机数序列固定!! 如果更换种子,那么随机数序列就会变化
Scanner键盘录入字符串
经验 : int nextInt();
假设 : String nextString();
实际 :
String next() : 可以录入字符串,但是如果录入了空格,空格之后的内容不能再录入了!!
String nextLine() : 一次录入一行, 以回车键结束
String字符串的类
String : 字符串的类
特殊的原因: Java中唯一一个即是常量也是对象的 东西;
字符串的特点:
1. 字符串不能变!! -> 一旦定义一个字符串此字符串就不能改变,如果改变了那么一定是生成了新的字符串!
String str = "Hello";
str = "HelloWorld";
2. 字符串是Java中唯一一个不需要new就可以生成的对象!!-> 只需要用双引号引起来就可以了
"双引号可以引一切内容,这些内容都会变成字符串" --> 字符串对象!
3. 字符串也是Java中唯一一个可以做加法的对象!!(本质是连接,结果一定是字符串类型)
4. 字符串的底层是一个字符数组; "Hello" -> char[] chs = {'H','e','l','l','o'};
//字符串的底层是一个字节数组
5. 字符串因为是常量所以可以被共享!!
//因为字符串不会变,所以字符串类中对字符串内容改变的方法都是生成了新的字符串,所以记得接收方法的结果!!
String字符串对象的创建
最为推荐的创建方式 : 直接赋值
String 对象名 = "直接赋值字符串即可";
String() : 创建一个内容为空的字符串对象
String(String original): 传入一个字符串对象,根据传入的字符串对象内容生成一个字符串对象!
**char[] --> String对象
String(char[] value) : 把传入的字符数组内容封装成一个字符串对象
String(char[] value, int offset, int count) : 把传入的字符数组的一部分内容封装成一个字符串对象
offset : 偏移量 -> startIndex : 起始索引
count : 转几个
** byte[] --> String对象 : 依仗ASCII码表(后续依仗各国的编码表)
String(byte[] bytes) : 把传入的字节数组内容封装成一个字符串对象
String(byte[] bytes, int offset, int length) 把传入的字节数组的一部分内容封装成一个字符串对象
offset : 偏移量 -> startIndex : 起始索引
length : 转几个
String(StringBuffer buffer) : 把StringBuffer对象 转换成字符串对象
String(StringBuilder builder) : 把StringBuilder对象 转换成字符串对象
输出对象就应该看到对象在堆内存中的地址值,但是如果你没有看到地址值而是别的内容,肯定有人在捣乱!
String的比较功能
boolean equals(Object anObject) : 比较字符串对象和传入的字符串对象内容是否相同,相同返回true
//严格区分大小写 : 校验用户名和密码
boolean equalsIgnoreCase(String anotherString) : 比较字符串对象和传入的字符串对象内容是否相同(忽略英文大小写)
//不区分大小写 :校验 验证码
源码分析:
public boolean equals(Object anObject) {
//第一板块 : 自己比自己
if (this == anObject) {//比较 调用equals方法的字符串对象 和 传入的对象 地址值是否相同
//地址相同所以肯定是同一个对象,是同一个对象 就直接返回true!
//提高代码的效率
return true;
}
//第二板块 : 如果传入的对象不是String类型 直接走第三板块 -> 认为不相同!!
// 提高代码效率,提高代码安全性
if (anObject instanceof String) {
//向下转型!!把实参的类型转回成字符串
String anotherString = (String)anObject;
//value : 字符串对象底层的数组
//value.length :获取数组的(字符串对象的)长度
//this.value.length : 调用方法字符串中字符串的长度 --> n
int n = /*this.*/value.length;
//调方法字符串的字符个数 和 传入方法字符串的字符个数 做 == 比较
//假设判断是false 说明2个字符串的字符个数都不一样,肯定内容不相同
//所以就没有必要比较每个字符是否相同
if (n == anotherString.value.length) {//提高代码的效率
//能从if进来说明2个字符串的长度一定是相同的
//调方法字符串底层数组赋值给 v1
char v1[] = this.value;
//传入方法字符串底层数组赋值给 v2
char v2[] = anotherString.value;
//遍历其中某一个字符串,因为2个字符串长度一样,所以索引是对的上的
//初始化语句
int i = 0;
//条件判断语句
while (n-- != 0) {
//循环中
if (v1[i] != v2[i]){//只要其中一个索引位置的字符不相同
//进if: 直接返回false
return false;
}
i++;//索引变化
}
//当上方循环执行完毕都没有进循环中的if判断,直接返回 true -> 内容相同
return true;
}
}
//第三板块 : 直接返回false -> 比较的结果是false -> 内容不相同
return false;
}
String的转换功能
String --> char[]
char[] toCharArray() : 把字符串对象变回成字符数组
String --> byte[]
byte[] getBytes() : 把字符串对象变回成字节数组 -> 使用开发平台默认的编码格式转换汉字为字节
UTF-8 编码格式下 汉字占用3个字节
byte[] getBytes(String charsetName) : 按照指定的编码格式把字符串对象变回字节数组
GBK : 汉字占用2个字节
汉字的字节一定是以负数开头
----------------------------------------------
String toUpperCase() : 把字符串中英文小写字符变成英文大写字符
String toLowerCase() : 把字符串中英文大写字符变成英文小写字符
String的获取功能
char charAt(int index) : 查找字符串中指定索引位置的字符
int length() : 获取字符串中字符的个数 / 获取字符串的长度
----------------------------------------
int indexOf(int ch) : 获取传入的字符第一次出现在字符串的索引位置
int indexOf(int ch, int fromIndex) : 从fromIndex开始算传入字符第一次出现在字符串的索引位置
int indexOf(String str)
int indexOf(String str, int fromIndex)
///最后一次出现的索引位置
int lastIndexOf(int ch)
int lastIndexOf(int ch, int fromIndex)
int lastIndexOf(String str)
int lastIndexOf(String str, int fromIndex)
String的判断功能
boolean contains(CharSequence s) :判断字符串中是否包含传入的字符串内容
看到方法的形参是 CharSequence 类型 你就可以把它当String,StringBuilder,StringBuffer看
boolean startsWith(String prefix) : 判断字符串是否以传入的字符串开头 -> 判断姓氏
boolean endsWith(String suffix) : 判断字符串是否以传入的字符串结尾 -> 判断文件后缀名
boolean isEmpty() :当且仅当 length() 为 0 时返回 true。 判断字符串是否是空字符串;
String的替换功能
String replace(char oldChar, char newChar) : 把newChar字符替换字符串中oldChar字符,生成新的字符串
String replace(CharSequence target, CharSequence replacement) :把replacement字符串替换原字符串中的target字符串,并生成新的字符串对象
//String replace(String target, String replacement) :
String的截取功能
String substring(int beginIndex) : 从beginIndex开始截取字符串到字符串结尾,获得新的字符串
String substring(int beginIndex, int endIndex) : 从beginIndex开始截取字符串到endIndex结束,获得新的字符串; --> [beginIndex,endIndex)
String的切割功能
String[] split(String regex) : 根据传入的字符串切割原字符串,生成切割后的字符串数组
String regex: 按什么切 就传入什么!
注意:
1. 如果传入的参数在源字符串中不存在,直接返回原字符串到结果的数组中!
2. regex : 正则表达式 --> 一套专门用来校验的语法
在字符串中 \\ 代表 \
. : 正则的通配符 -> 就要按.切 :
\ : 转义符 --> \\\\
X+ : X代表你要使用的字符 X+ 这个字符出现一次或者多次都按一次计算
String的匹配功能
boolean matches(String regex) : 判断调用方法的字符串是否符合传入的正则规则!!
常见的正则规则 : 上网百度!!
String的其他功能
String concat(String str) : 把传入的字符串对象拼接到调用方法字符串的后方,生成新的字符串对象
//废物方法 -> 字符串的拼接 可以用 +
String toString() : 把调用方法的字符串对象转换成字符串对象
//废物方法
static String valueOf(任意对象) : 把任意对象转成字符串类型 -> 底层用到的是 toString()方法
//废物方法 -> 任意对象 + ""
//等效于构造: String(char[] value)
static String copyValueOf(char[] data)
//等效于构造: String(char[] value,int offset,int count)
static String copyValueOf(char[] data, int offset, int count)
String trim(): 去除字符串2端的空格 -> 有事没事trim一下