API总结
API Application Programming Interface,应用程序编程接口
Object类
hashcode与equals (与==的区别) tostring getClass clone
clone方法实现
public class Plixa {
public static void main(String[] args) throws CloneNotSupportedException {
person p = new person();
Object object = p.clone();
// System.out.println(object.name); //直接调用子类对象调不到,子类独有的属性
person person = (person) object; //向下转型
System.out.println(person.name);
}
}
class person implements Cloneable{
String name = " zhangsan ";
int age;
public Object clone() throws CloneNotSupportedException{
return super.clone();
}
}
String类*************
空串与null的区别
null没有地址值 空串有地址值 长度为0;
构造方法
new String(byte[],offset,length
new String(char[],offset,length)
String的内存分析
直接赋值存放于常量池中,仅有一份 ;当有变量时当成是new出来的,存放在堆
s+=“haha” 存放在堆内存中
s=“hello” + “world” // 先在常量池查有没有hello 和world 没有就先创建,然后拼成 helloworld ,如果常量池没有helloworld,就创建一个,如果有了就不再创建,因此会开辟三个空间
String与byte[] char[] int相互转换
byte数组与字符串相互转换 getbytes new String(byte[])
char数组与字符串相互转换 tocharArray new String(char[]) String.valueOf(char[])
int与字符串相互转换 String.valueOf(int) Integer.valueOf(str) Integer.parseInt(str)
成员方法
String | StringBuffer | |
---|---|---|
共有方法 | equals length subString charAt indexOf | equals length subString charAt indexOf |
增 | concat | append insert(index,str) |
删 | trim | delete(start,end) |
改 | replace(str1,str2) toUpperCase toLowerCase | replace(start,end,str) |
查 | charAt(index) indexOf(str,index) contains(调用的equals), startswith endswith isEmpty conpareTo | charAt(index) indexOf(str,index) |
独有 | reverse | |
大多有返回值 | 大多在原串上进行修改的,比字符串更方便 |
例题
public class Patrenaza {
public static void main(String[] args) {
// 字符串中java出现的次数
String s = "woaijavafeichangaijavaheiaijavabuzhidaoniaibuaijavanejava";
// 第一种方法
int count = 0;
/*
* String[] sp = s.split("java"); if(s.endsWith("java")){ count =
* sp.length; }else{ count = sp.length-1; }
*/
// 第二种方法
int i = s.indexOf("java");
while (i != -1) {
count++;
i = s.indexOf("java", ++i);//此时index必须加1,否则会一直循环 i++也会一直循环
}
System.out.println(count);
}
}
StringBuffer类*************
String与StringBuffered区别:
只有一份 线程安全
StringBuiled与StringBuffered区别:
builder是线程不安全的,但如果只是单线程,那么就可以用这个,其方法和buffer相同
如果要操作少量的数据,用String ;
单线程操作大量数据,用StringBuilder ;
多线程操作大量数据,用StringBuffer。
构造方法
new StringBuffer(string) s.tostring //StringBuffer转string
数组高级
排序 : 选择排序 冒泡排序 二分查找(必须是有序的)
import java.util.Arrays;
public class Plixa {
public static void main(String[] args) {
int[] arr ={12,24,98,8,74,63};
// 选择排序
/*for(int i = 0 ;i < arr.length-1;i++){
for(int j = i+1;j< arr.length;j++){
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));*/
//冒泡排序
for(int i = 1; i < arr.length;i++){
for(int j = 0;j < arr.length-i;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1]= temp;
}
}
}
System.out.println(Arrays.toString(arr));
//二分查找 先将数组顺序排列
System.out.println(binarySearch(arr, 63));
System.out.println(binarySearch(arr, 110));
}
public static int binarySearch(int[] arr, int num) {
int start = 0;
int end = arr.length - 1;
while (start <= end) {
int middleindex = (start + end) / 2;
int middle = arr[middleindex];
if (num == middle) {
return middleindex;
} else if (num < middle) {
end = middleindex - 1;
} else {
start = middleindex + 1;
}
}
return -1;
}
}
Arrays类
Arrays.toString() 转为字符串 Arrays.aslist() 构建数组
Arrays.sort() 升序排序 Arrays.binarysearch(arr,key) 二分查找,只针对升序
包装类
包装类出现:Object是万类之祖,但不包含基本类型,所以在集合中不带他们玩
Integer
进制之间的转换
Character
对单个char进行判断 大小写数字及转换等
Character.isLowerCase Character.toLowerCase
习题:统计字符串中大写字母,小写字母,数字出现的次数
public class MapDemo {
public static void main(String[] args) {
String s = "ajdjlLJLAJSLF89979asdaJKJ9sa12";
int count1 = 0;
int count2 = 0;
int count3 = 0;
//转为char数组
/*char[] charArray = s.toCharArray();
for(int i =0 ; i< charArray.length;i++){
if(Character.isUpperCase(charArray[i])){
count1++;
}else if(Character.isLowerCase(charArray[i])){
count2++;
}else{
count3++;
}
}
*/
//使用charat
for(int i =0;i<s.length();i++){
if(Character.isUpperCase(s.charAt(i))){
count1++;
}else if(Character.isLowerCase((s.charAt(i)))){
count2++;
}else {
count3++;
}
}
System.out.println(count1);
System.out.println(count2);
System.out.println(count3);
}
}
BigInteger类
用于对超过int范围的数值进行计算, 构造方法中传入的是str类型(由于其可能超出int)
add substract multiple divide divideandreminder 返回的是个数组 分别是整数和余数
BigDicemal类
防止精度损失,构造方法中传入String(最好不要用int,) 此时divide得到小数,
divide还有一种方法, divide(b2,int 保留位数,int 进位规则)
math
abs pow sqrt
Random类
构造方法中无参是以当前时间做为种子,new Random(long seed) r.nextint(20)
system类*************
filelize() 回收垃圾 final修饰类方法变量, finally一定执行
system.exit(0) 强制退出jvm 比return更狠
system.crrentTimeMillis()当前毫秒值,用于测试方法执行效率 random的无参构造中的种子
system.nanotime() 纳秒值 用于声称序列号
systemarraycopy(src, index,dest,index,length) 拷贝数组
Date类*************
日期和时间放在一起了
构造方法 new Date(long ) 传入的是个long值 1232149214L
成员方法 date.getTime( ) date.setTime(long)
获取当前毫秒值的两种方法 new date().getTime() system.currenttimemillis
simpleDateFormat类*************
日期格式的转换 把date转成我们想要的日期格式
构造方法 new simpleDateFormat(“pattern”)
成员方法 format (日期转为字符串)
parse(String转成date) 主要是转成date后 可以得到毫秒值用于计算
字符串日期格式必须和格式相同
例题. 将2020/01/07 16:35:21 转成 16:35:21 2020-01-07
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MapDemo {
public static void main(String[] args) throws ParseException {
// 将2020/01/07 16:35:21 转成 16:35:21 2020-1-7
Date date1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse("2020/01/07 16:35:21");
String str = new SimpleDateFormat("HH:mm:ss yy-M-d").format(date1);
System.out.println(str);
}
}
正则表达式(Pattern类)
匹配功能
String.mathches(regex)
\d 数字 \w字母或数字 \s 空白字符 要两个\ \D非数字 \s 空白 \S 非空白 \b 单词的边界
?0次或1次 * 0或多 + 至少一次 . 代表一个字符
分割功能
String.split() 文件路径分割
import java.util.Arrays;
//将字符串 排序后打印
public class Patrenaza {
public static void main(String[] args) {
String s = "19 89 76 3 15";
String[] str = s.split(" ");
int[] arr = new int[str.length];
for (int i = 0; i < str.length; i++) {
arr[i] = Integer.valueOf(str[i]);
}
Arrays.sort(arr);
String output = "";
for (int i : arr) {
output += i + " ";
}
System.out.println(output.trim());
}
}
替换功能
String.replaceAll()
public class Patrenaza {
public static void main(String[] args) {
String s = "15710313872";
System.out.println(s.replaceAll("(\\d{3})(\\d{4})(\\d{4})", "$1****$3"));
String id = "130185197307128713";
System.out.println(id.replaceAll("(\\d{6})(\\d{8})(\\d{4})", "$1********$3"));
}
}
获取功能***************
Pattern macher
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Patrenaza {
public static void main(String[] args) {
String str = "jin tian yao xia yu, da jia pa bu pa? huang bu huang? are you sure";
// 创建Pattern对象 传入一个正则表达式
Pattern p = Pattecern.compile("\\b[a-zA-Z]{3}\\b");
// 调用 p对象中的matcher方法,获取匹配器对象
Matcher matcher = p.matcher(str);
int count = 0;
while (matcher.find()) { // find一次,才能打印一次
System.out.println(matcher.group()); // group必须要和find一起使用
count++;
}
System.out.println(count);
}
}