JAVA的常见API文档(上)
游戏打包
注意API文档中的方法不需要记忆!!
了解之后如果需要可以查询API文档
对Math的方法总结:
运用刚学的Math方法加快代码的运行效率
可以减少循环次数
找规律:
发现因子有规律:
必定一个大于平方根,一个大于平方根
package kl002;public class Mathdemo {public static void main(String[] args) {System.out.println(isPrime(17));}public static boolean isPrime(int num){int cnt = 0;for (int i = 2; i < Math.sqrt(num); i++) {cnt++;if(num % i == 0){return false;}}System.out.println(cnt);return true;}
}
要求:
package kl002;public class Mathdemo1 {public static void main(String[] args) {System.out.println("-----------------------------------");System.out.println("水仙花数:");int cnt1 = 0;for (int i = 100; i < 1000; i++) {int ge = i % 10;int shi = i / 10 % 10;int bai = i / 100 % 10;double sum = Math.pow(ge, 3) + Math.pow(shi, 3) + Math.pow(bai, 3);if (sum == i) {System.out.println(i);cnt1++;}}System.out.println(cnt1);System.out.println("-----------------------------------");System.out.println("-----------------------------------");System.out.println("四叶玫瑰数:");int cnt2 = 0;for (int i = 1000; i < 10000; i++) {int ge = i % 10;int shi = i / 10 % 10;int bai = i / 100 % 10;int qian = i / 1000 % 10;double sum2 = Math.pow(ge, 4) + Math.pow(shi, 4) + Math.pow(bai, 4) + Math.pow(qian, 4);if (sum2 == i){System.out.println(i);cnt2++;}}System.out.println(cnt2);System.out.println("-----------------------------------");System.out.println("-----------------------------------");System.out.println("五叶玫瑰数:");int cnt3 = 0;for (int i = 10000; i < 100000; i++) {int ge = i % 10;int shi = i / 10 % 10;int bai = i / 100 % 10;int qian = i / 1000 % 10;int wan = i / 10000 % 10;double sum3 = Math.pow(ge, 5) + Math.pow(shi, 5) + Math.pow(bai, 5) + Math.pow(qian, 5) + Math.pow(wan, 5);if (sum3 == i){System.out.println(i);cnt3++;}}System.out.println(cnt3);System.out.println("-----------------------------------");System.out.println("-----------------------------------");System.out.println("验证两位数没有自幂数:");int cnt4 = 0;for (int i = 10; i < 100; i++) {int ge = i % 10;int shi = i / 10 % 10;double sum4 = Math.pow(ge, 2) + Math.pow(shi, 2);if (sum4 == i){System.out.println(i);cnt4++;}}System.out.println(cnt4);System.out.println("-----------------------------------");}
}
运行结果:
水仙花数:
153
370
371
407
4
四叶玫瑰数:
1634
8208
9474
3
五叶玫瑰数:
54748
92727
93084
3
验证两位数没有自幂数:
0
System
拷贝的数据类型必须一样,否则会报错
对System工具的总结:
Runtime
Runtime只有一个运行环境!
用此方法可以获得你CPU的线程:
package kl002;public class Mathdemo2 {public static void main(String[] args) {System.out.println(Runtime.getRuntime().availableProcessors());}
}
练习:
克隆:
使用第三方工具:(以后的对象克隆)
使用Goson代码
Object总结
Objects
Objects的成员方法
正怎表达式的总结
练习(爬虫)
爬取网络信息
创建URL信息
连接上这个网址
细节:保证网络时通畅的
创建一个对象去读取网络的中的信息
1.获取正怎表达式的对象
2.获取文本匹配的对象
3.利用m去读取s,会按照找里面的小串
带条件的数据爬取
package kl002;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexDemo1 {public static void main(String[] args) {String s = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";//1.定义正怎表达式//?理解为前面的数据Java//=理解为后面的数据8|11|17//但是在获取数据的时候只获取前半部分//需求1;只要获取Java,不需要版本号String regex1 = "(?i)Java(?=8|11|17)";//需求2;获取Java8、Java11、Java17String regex2 = "(?i)Java(?:8|11|17)";String regex3 = "(?i)Java(?=8|11|17)";//需求3:获取除了8、11、17的Java文本String regex4 = "(?i)Java(?!=8|11|17)";//忽略大小写的另一种写法表达式//String regex = "(?i)Java(?=8|11|17)";//(?i)此种写法是一种忽略大小写的写法后面的写法与上面的写法是一样的//(?!)此种写法是一种忽略大小写的写法,并且除了要求中的爬取数据以外的同类数据,后面的写法与上面的写法是一样的//2.编译正怎表达式Pattern p = Pattern.compile(regex2);Matcher m = p.matcher(s);while(m.find()){System.out.println(m.group());}}
}
结果1:
Java8
Java11
Java17
Java17
贪婪爬取与非贪婪爬取
贪婪爬取:爬取数据的时候尽可能的多获取数据
非贪婪爬取:爬取数据的时候尽可能的少获取数据
Java中默认的是贪婪爬取
+后面加上?可以转变为非贪婪爬取
package kl002;import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexDemo2 {public static void main(String[] args) {String s = "Java自从95年问世以来,abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" + "经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本," + "下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";//定义正怎表达式//默认为贪婪爬取String regex = "ab+";//+后面加上?为非贪婪爬取//编译正怎表达式Pattern p = Pattern.compile(regex);Matcher m = p.matcher(s);while(m.find()){System.out.println(m.group());}}
}
先定义一个字符串
String result = s.replaceAll("[\\w&&[^]+",vs);
sout(result);
细节:方法在底层之前也会创建文本解析器的对象
然后从头开始去读取字符串中的内容,只要有满足的,那么就用第二个参数去替换
s.split
捕获分组的练习
package kl002;public class RegexDemo3 {public static void main(String[] args) {//需求1:判断一个字符串开始字符和结束字符是否相同?只考虑一个字符//举例:a123a b456b 17981 &abc& a123b(false)String regex2 = "(.).*\\1";System.out.println("a123a".matches(regex2));System.out.println("b456b".matches(regex2));System.out.println("17981".matches(regex2));System.out.println("&abc&".matches(regex2));System.out.println("a123b".matches(regex2));System.out.println("-------------------------");//需求2:判断一个字符串开始字符和结束字符是否相同?可以有多个字符//举例:abc123abc b456b 123798123 &|@abc&|@ abc123abd(false)String regex3 = "(.+).*\\1";System.out.println("abc123abc".matches(regex3));System.out.println("b456b".matches(regex3));System.out.println("123798123".matches(regex3));System.out.println("&|@abc&|@".matches(regex3));System.out.println("abc123abd".matches(regex3));System.out.println("-------------------------");//需求3:判断一个字符串开始字符和结束字符是否相同?开始部分内部每个字符也要一致//举例:aaa123aaa bbb456bbb 111798111 &&abc&& a123b(false)//(.)把首字母看作一组// \\1:把首字母拿出来再次使用// *作用于\\2,表示后面重复的内容出现0次或多次String regex4 = "((.)\\2*).*\\1";System.out.println("aaa123aaa".matches(regex4));System.out.println("bbb456bbb".matches(regex4));System.out.println("111798111".matches(regex4));System.out.println("&&abc&&".matches(regex4));System.out.println("a123b".matches(regex4));System.out.println("-------------------------");}
}
运行结果:
true
true
true
true
false
true
true
true
true
false
true
true
true
true
false
捕获数据
练习.口吃变换
package kl002;public class RegexDemo4 {public static void main(String[] args) {//需求将字符串中的多余的字替换String str = "我要学学编编编编编编编程程程程程程程程";String regex = "(.)\\1+";String result = str.replaceAll(regex,"$1");System.out.println(result);}
}
捕获分组和非捕获分组
总结
package kl002;import java.util.Date;public class Date1 {public static void main(String[] args) {//1.创建对象表示一个时间Date d1 = new Date();System.out.println(d1);//2.创建对象表示指定的时间Date d2 = new Date(0L);d2.setTime(1000L);System.out.println(d2);//3.获取时间long time = d1.getTime();System.out.println(time);}
}
运行结果:
Sat May 17 21:49:10 CST 2025
Thu Jan 01 08:00:01 CST 1970
1747489750977
时间的比较:
可以通过long两个数据类型来接受getTime
然后通过if条件判断语句来判断
package kl002;import java.util.Date;
import java.util.Random;public class Date2 {public static void main(String[] args) {Random r = new Random();Date d1 = new Date(Math.abs(r.nextInt()));Date d2 = new Date(Math.abs(r.nextInt()));long time1 = d1.getTime();long time2 = d2.getTime();if (time1 > time2) {System.out.println("d1>d2");}else if (time1 < time2) {System.out.println("d1<d2");}else {System.out.println("d1=d2");}extracted();}private static void extracted() {Date d1 = new Date(0L);long time = d1.getTime();time = time + 1000L * 60 * 60 * 24 * 365 * 100;d1.setTime(time);System.out.println(d1);}
}
运行结果:
Sat May 17 21:49:10 CST 2025
Thu Jan 01 08:00:01 CST 1970
1747489750977
谢谢观看!