文章目录
- String类的截取功能
- 替换功能
- StringBuffer
- StringBuffer的截取功能
- StringBuffer的替换功能
- String <----> StringBuffer类型的相互转换
- 将数组拼接为字符串的问题
- StringBuffer的反转功能
- StringBuffer和数组的区别?
- StringBuffer和StringBuilder的区别?
- StringBuffer和String类型作为形式参数有什么区别:
- Integer类
- 将String----int类型在相互转换
- character类
- 静态导入的格式:
- Math类
- Calendar类
- Date类
- System类
- Arrays类
- Random类
- BigDecimal类
public int compareTo(String anotherString) 按字典顺序比较
源码如下:
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
获取两个字符串的长度,取较小的长度进行每个字符的比较,如果字符不相同,返回字符的ASCII码值差,如果都相同,返回两个字符串长度的差值
String类的截取功能
public String substring(int beginIndex,int endIndex)
从指定位置开始截取,到指定位置结束,但是包含beginIndex,不包含endIndex索引(包前不包后)
替换功能
-
public String replace(char oldChar,char newChar):将以前的字符用新的字符替换掉
-
public String replace(String oldStr,char newStr):将以前的字符用新的字符替换掉
-
public String trim()去除两端空格
StringBuffer
线程安全的可变字符序列 ,提供字符串缓冲区
StringBuffer的构造方法:
-
1)public StringBuffer():空参构造,初始容量为 16 个字符。(默认的容量足够,不需要指定容量大小)
-
2)public StringBuffer(String str):构造一个缓冲区,指定字符串内容到缓冲区中,容量大小等于16个+当前字符串的实际长度
-
3)public StringBuffer(int capacity):指定容量大小,构造一个缓冲区
两个获取功能
int length():获取长度(缓冲区中字符数)
public int capacity():获取缓冲区的容量大小
StringBuffer的删除功能
public StringBuffer deleteCharAt(int index):删除指定位置处的字符,返回缓冲区本身
public StringBuffer delete(int start,int end):删除从指定位置到指定位置结束(包前不包后,end-1位置)
StringBuffer的截取功能
public String substring(int start):从指定位置开始截取,默认截取到末尾
public String substring(int start, int end):从指定位置开始截取,截取到指定位置结束!
StringBuffer的替换功能
public StringBuffer replace(int start,int end, String str)
从指定位置开始到指定位置结束(end-1处)使用str子串进行替换
String <----> StringBuffer类型的相互转换
String------------->StringBuffer
1). 方法一: StringBuffer sb=new StringBuffer(String str); StringBuffer构造方法 2). 方法二: StringBuffer sb=new StringBuffer(); sb.append(String str); StringBuffer无参构造+append()方法
StringBuffer---------------------->String
1). 方法一: String str=new String(StringBuffer sb); String构造方法 2). 方法二: String str=sb.toString(); StringBuffer的toString()方法
将数组拼接为字符串的问题
需求: 已知数组:int[] arr = {11,22,33,44,55} ; 将数组拼接字符串 "[元素1, 元素2, 元素3, ....]"
方法一: 定义String str="[",通过"+"连接符,for循环遍历数组元素,进行拼接 关键代码如下: String result = "" ; //拼接左中括号 result += "[" ; //遍历数组 for (int i = 0; i < arr.length; i++) { if(i==arr.length-1) { result += arr[i] ; result += "]" ; }else { result += arr[i] ; result += ", " ; } } return result;
方法二: 定义StringBuffer sb=new StringBuffer("["),通过append()方法和for循环遍历数组进行拼接 关键代码如下: StringBuffer sb = new StringBuffer() ; sb.append("[") ; //遍历数组 for (int i = 0; i < arr.length; i++) { if(i==arr.length-1) { sb.append(arr[i]).append("]") ; }else { sb.append(arr[i]).append(", ") ; } } return sb.toString() ;
方法三: 利用Arrays类的toString()静态方法直接可以将数组变为字符串输出 Arrays.toString(int[] a);
StringBuffer的反转功能
public StringBuffer reverse() 将字符串内容反转
-
StringBuffer和数组的区别?
-
他们两者都属于引用类型,而且都是"容器"
-
StringBuffer: 可变的字符序列 (长度可变的)
-
里面可以存储任何数据类型----->都是以"字符"进行拼接 通过append追加
-
length()
-
数组: 长度固定,只能存储同一种类型的元素!
-
length属性
-
int[] arr = {100,200,300,“hello”} ; //错误的!
-
StringBuffer和StringBuilder的区别?
-
共同点: 两者之间互相兼容的,功能是相同(添加,构造方法,替换,删除,截取…)
-
StringBuffer:可变的字符序列
-
线程角度:线程安全的--->同步的---->执行效率低!
-
StringBuilder:可变的字符序列
-
线程角度:线程不安全的---->不同步的---->执行效率高
-
在单线程程序中,StringBuilder去替换StringBuffer,因为效率高!
-
StringBuffer和String类型作为形式参数有什么区别:
-
两个都是引用类型
-
String类作为形式参数,它的效果基本数据类型一样(String是最特殊的引用类型)
-
String是一个常量,一旦被赋值,其值不能被改变
-
StringBuffer/StringBuilder,他们作为形式参数,
-
形式参数的改变会直接影响实际参数(和其他引用类型效果一样)
Integer类
成员变量(字段)
public static final int MIN_VALUE:最小值
public static final int MAX_VALUE:最大值
构造方法
public Integer(int value)
构造新分配的 Integer对象,该对象表示指定的int值。
public Integer(String s) throws NumberFormatException
构造一个新分配Integer对象,表示由指示值String参数。 字符串将转换为int值.
如果不是数字字符串,就出现NumberFormatException:数字格式化异常
Integer的注意点
1) Integer 变量名 = 整数值直接赋值; 实际执行一个Integer的.valueOf(整数值); valueOf方法里面提供了一个Integer的内部类:IntegerCache public static Integer valueOf(int i) { //先判断是否在这个i数据是否符合缓存区中的low:-128 high:127 if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; //Integer[] cache; //如果不在这个超出了缓存区的直接重新堆内存中开辟空间 return new Integer(i); }
- //创建一个Integer对象
Integer i = 100 ; i += 200 ; System.out.println(i); /* * 通过反编译工具查看对应.class文件的优化 *public static Integer valueOf(int i):将100整数int类型---提升Integer类型:自动装箱 * Integer i = Integer.valueOf(100); * i = Integer.valueOf(i.intValue() + 200); //1)先将i拆箱:Integer---int类型 public int intValue() //2)然后将结果300 int类型---->Integer类型:自动装箱 System.out.println(i);
将String----int类型在相互转换
int------>String: Integer.toString(int i)
String----->int: Inerget.parseInt(String str)
character类
构造方法
public C Character:char类型的包装类类型,包含一个char类型的值
Character(char value)
判断功能:
public static boolean isDigit(char ch):判断当前字符是否是数字字符
public static boolean isLowerCase(char ch):判断当前字符是否是小写字母字符
public static boolean isUpperCase(char ch):判断当前字符是否是大写字母字符
静态导入的格式:
-
import static 包名.类名.方法名;
前提这些方法是静态 的
-
使用静态导入的注意事项:
-
如果当前类中出现了和导入的静态方法名一样,冲突了,在使用静态导入的这个的方法的时候
-
就必须带上限定(包名.类名)
Math类
- java.lang.Math:
- Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
- public static double abs(double a/…):求某个数据的绝对值
- public static double ceil(double a):向上取整
- public static double floor(double a):向下取整
- public static int min(int a, int b):求两个int数据的最小值
- public static int max(int a,int b):求两个int数据的最大值
- public static double random():随机数[0.0,1.0) ---------> Java提供随机数生成器:Random类 nextInt(int n)
- public static int round(float a):四舍五入…
- public static long round(double a)
- public static double sqrt(double a):开根(一个正整数的平方根) 4—2
- public static double pow(double a,double b):返回结果:a的b次幂
Calendar类
-
java.util.Calendar类:日历类
-
Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,
-
并为操作日历字段(例如获得下星期的日期)提供了一些方法
-
Calendar不能直接实例化!
-
某一个类如果不能直接实例化:
-
首先里面会存在一些静态功能,静态功能的返回值就是该类本身!
-
public static Calendar getInstance()
-
public int get(int field):获取的日历字段的值!
-
参数:传递日历字段
-
Calendar的成员方法:
-
给日历字段添加或者减去时间偏移量
-
public abstract void add(int field,int amount)
-
日历对象.add(Calendar.DATE,-5):当前日历时间的5天前
-
设置当前年月日,日历时间
-
public final void set(int year,int month, int date)
Date类
-
java.util.Date类
-
特定的瞬间,精确到毫秒。
-
构造方法:
-
public Date() 无参构造
-
成员方法:
-
public long getTime() :返回1970 年 1 月 1 日所表示的时间毫秒
-
java.util.Date 应用场景 String:文本格式 和Date格式的相互转换
-
String文本格式 和Date日期格式相互转换
-
Date---------------->String 日期文本格式 "格式化"操作
-
java.text.DateFormat:可以将日期和文本相互转换
-
DateFormat继承自Format类:都是抽象类,不能直接实例化!,提供更具体的子类
-
java.text.SimpleDateFormat extends DateFormat
-
它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)
-
SimpleDateFormat的构造方法
-
public SimpleDateFormat(String pattern):
-
创建一个SimpleDateFormat对象
-
参数:指定一个模式 要遵循一定的规则(jdk对它规定了)
-
y年 ------2020 "yyyy"
-
M年中月份----10/03 "MM"
-
d月中的天数----05/21 'dd'
-
h:表示上午/下午的小时数 hh
-
H:一天中的小时数 HH
-
m:分钟数 mm
-
s:秒数 ss
-
模式
-
“yyyy-MM-dd HH:mm:ss”
-
“yyyy年MM月dd日 HH时mm分ss秒”
-
Date---->String
-
格式化的步骤:
-
1)存在Date对象
-
2)创建SimpleDateFormat(String pattern)
-
3)public final String format(Date date):格式化方法
-
解析
-
String----->Date
-
步骤:
-
1)存在String "日期文本" "2020-10-21"
-
2)创建SimpleDateFormat(String pattern)
-
3)public Date parse(String source) throws ParseException
-
解析:
-
SimpleDateFormat中的参数模式:必须和String 日期文本格式一致,否则出现解析异常(ParseException)
System类
- System 类包含一些有用的类字段和方法。它不能被实例化。
- 字段:
-
public static final InputStream in :标准的"输入流"
-
public static final PrintStream out :标准的"输出流"
- 键盘录入:
-
Scanner(InputStream in) ---->Scanner(System.in)
- 输出语句:
-
System.out.println("xxx")----->System.out--->PrintStream ps (字节打印流)
-
ps.println("x") : 字节打印流调用方法名println(String str)
- 成员方法:
-
public static void gc() 运行垃圾回收器(手动开启)
-
实际开发中,开发者不需要开启
-
运行垃圾回收器,它会调用Obejct类finalize(),回收没有更多引用的对象
-
public static void exit(int status):参数状态为0:
-
表示正常终止jvm
-
public static long currentTimeMillis():获取当前系统时间的毫秒值
Arrays类
- public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
-
从原数组中的指定位置开始进行复制指定length长度复制到目标数组中的某个位置
-
参数1:指定源数组
-
参数2:源数组中的某个位置
-
参数3:目标数组对象
-
参数4:目标数组对象中的某个位置
-
参数5:指定几个元素复制(长度)
//定义一个数组
// int[] arr = {67,89,13,54,25} ;
//需求:将数组拼接字符串
//jdk提供工具类:Arrays 针对数组的操作工具类
//public static void sort(int[] a):public static void sort(int[] a)
//Arrays.sort(arr); //调用:排序了
//Arrays提供的功能:public static String toString(任意类型的数组)
//System.out.println(Arrays.toString(arr));//[13, 25, 54, 67, 89]
Random类
- java.util.Random:随机数生成器
- 构造方法
- public Random() :(推荐),产生的随机数是变化的
- public Random(long seed):每次产生的随机数 是固定的!
- 成员方法:
-
public int nextInt():获取的是int范围内的随机数
-
public int nextInt(int n):获取0到n之间的随机数[0,n)
- 获取随机数两种方式:
-
Math类的random()方法: 返回值double类型
-
Random类空参构造+nextInt(int n):获取随机数
BigDecimal类
- java.math.BigDecimal
-
描述:对浮点类型的数据进行精确计算的!
- 构造方法:
- public BigDecimal(String val) :字符串"数字字符串"
-
"1.0"
-
"0.01.."
- 成员方法:
-
public BigDecimal add(BigDecimal augend) :求和
-
public BigDecimal subtract(BigDecimal subtrahend):减法
-
public BigDecimal multiply(BigDecimal multiplicand):乘法
extInt(int n):获取0到n之间的随机数[0,n)
*
*
- 获取随机数两种方式:
-
Math类的random()方法: 返回值double类型
-
Random类空参构造+nextInt(int n):获取随机数