Java常用的API(1)https://developer.aliyun.com/article/1540974
BigInteger类的成员方法
BigInteger类的存储方式
先将大整数转换成二进制补码,以32位为一组拆成若干段(如上图是拆成了3段)存入一个数组中。其中,第一位是无符号位。
BigDecimal类
小数在计算机中的存储模式
BigDecima的作用:①用于小数的精确计算;②用来表示很大的小数
如果是除不尽的小数,需要设置精确几位和舍入模式。
BigDecima的存储模式
把输入的字符参数拆开,存储对应的ASCII数值放到一个数组中。
可以使用debug功能分析Java的底层运算。
正则表达式
正则表达式作用:①校验字符串是否满足规则;②在一段文本中查找满足要求的内容
[a-z&&[def]] //a-z和def的交集。为:d,e,f //细节:如果要求两个范围的交集,那么需要写符号8& //如果写成了一个&,那么此时&表示就不是交集了,而是一个简简单单的&符号 System.out.println("a".matches("[a-z&&[d-f]]")); System.out.println("&".matches("[a-z&&[d-f]]")); System.out.println("a".matches("[a-z&[d-f]]")); System.out.println("&".matches("[a-z&[d-f]]"));
“\”在Java中表示转义字符。
//忽略大小写:(?i),会忽略在这之后的字母的大小写 String regex4="a((?i)b)c"; System. out. println("------------"); System.out.println("abc". matches(regex4));//true System.out.println("WBC". matches(regex4));//false System.out.println("aBc". matches(regex4));//true
正则表达式总结
正则表达式在字符串方法中的使用
分组
Q:正则表达式中的[]和()什么区别?
分组就是一个小括号
//需求1:判断一个字符串的开始字符和结束字符是否一致?只考虑一个字符 //举例:ai23a b456b 17891&abc&a123b(false) String r1 = "(.).+\\1"; String str1 = "ai23a还是短发b456b的防护等级17891&abc&a123b"; extracted(r1,str1); System.out.println("ai23a".matches(r1)); System.out.println("b456b".matches(r1)); System.out.println("17891&abc&a123b".matches(r1)); System.out.println("ai23a还是短发b456b的防护等级17891&abc&a123b".matches(r1)); System.out.println("-------------------"); //需求2:判断一个字符串的开始部分和结束部分是否一致?可以有多个字符 //举例:abc123abc b456b123789123&l@abc&!@abc123abd(false) String r2 = "(.+).+\\1"; System.out.println("abc123abc".matches(r2)); System.out.println("b456b".matches(r2)); System.out.println("123789123".matches(r2)); System.out.println("&!@abc&!@".matches(r2)); System.out.println("abc123abd".matches(r2)); System.out.println("-------------------"); //需求3:判断一个字符串的开始部分和结束部分是否一致?开始部分内部每个字符也需要一致 //举例:aaa123aaabbb456bbb111789111&&abc&& /*(.):把首字母看做一组 \\2:把首字母拿出来再次使用 +:作用于\\2,表示后面重复的内容出现1次或多次*/ String r3 = "((.)\\2+).+\\1"; System.out.println("aaa123aaa".matches(r3)); System.out.println("bbb456bbb".matches(r3)); System.out.println("111789111".matches(r3)); System.out.println("&&abc&&".matches(r3)); System.out.println("aaa123aad".matches(r3)); System.out.println("-------------------");
后续还要继续使用本组数据:
- 正则内部使用:\\组号
- 正则外部使用:$组号
/*需求: 将字符串:我要学学编编编编程程程程程程 替换为:我要学编程*/ String s = "我要学学编编编编程程程程程程"; //(.)表示把重复内容的第一个字符看做一组 //\\1表示第一字符再次出现 //+至少一次 //$1表示把正则表达式中第一组的内容,再拿出来用 String r = "(.)\\1*"; System.out.println(s.replaceAll(r,"$1"));
捕获分组和非捕获分组
非捕获分组:仅仅是把括号括起来,而不占用组号
/* 需求1:爬取版本号为8,11,17的Java文本,但是只要Java,不显示版本号。 需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8 Java11Java17 Java17 需求3:爬取除了版本号为8,11,17的Java文本,*/ String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为"+ "这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台。" String r1 = "((?i)Java)(?=8|11|17)"; //需求1 String r21 = "((?i)Java)(8|11|17)"; //需求2 String r22 = "((?i)Java)(?:8|11|17)"; //需求2 String r3 = "((?i)Java)(?!8|11|17)"; //需求3 Pattern p = Pattern.compile(r1); Matcher m = p.matcher(str); while (m.find()) { String g = m.group(); System.out.println(g); }
Q:正则表达式中?
到底怎么用?
package api; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexTest4 { public static void main(String[] args) { String str = "Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa" + "经历了很多版本,目前企业中用的最多的是JAva8和JaVa11," + "因为这两个是长期支持版本,下一个长期支持版本是JavA17,相信在未来不久JAvA17也会逐渐登上历史舞台"; //extracted1(str); /*有如下文本,请按照要求爬取数据。” Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa 经历了很多版本,目前企业中用的最多的是Java8和Java11, 因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台 需求1:按照ab+的方式爬取ab,b尽可能多获取 需求2:按照ab+的方式爬取ab,b尽可能少获取 贪婪爬取:在爬取数据时尽可能多获取数据 非贪婪爬取:在爬取数据时尽可能少获取数据 Java中默认是贪婪爬取*/ String s1 = "ab+"; //需求1,贪婪爬取 String s2 = "ab+?"; //需求2,非贪婪爬取 Pattern p = Pattern.compile(s2); Matcher m = p.matcher(str); while (m.find()) { String g = m.group(); System.out.println(g); } } private static void extracted1(String str) { /*有文本:Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11, 因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台 需求1:爬取版本号为8,11,17的Java文本,但是只要Java,不显示版本号。 需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8 Java11Java17 Java17 需求3:爬取除了版本号为8,11,17的Java文本,*/ String s1 = "((?i)Java)(?=8|11|17)"; //需求1 String s21 = "((?i)Java)(8|11|17)"; //需求2 String s22 = "((?i)Java)(?:8|11|17)"; //需求2 String s3 = "((?i)Java)(?!8|11|17)"; //需求3 Pattern p = Pattern.compile(s3); Matcher m = p.matcher(str); while (m.find()) { String g = m.group(); System.out.println(g); } } }
Java常用的API(3)https://developer.aliyun.com/article/1540976