首页 > 编程语言 >java 基础复习

java 基础复习

时间:2023-04-30 14:11:05浏览次数:50  
标签:BigInteger java 复习 基础 获取 正则 new String

4-29号

专题 java 大数处理和精度外理方法整理

java中整数有四个类型,byte short int long.

java中byte 1个字节,short 2个字节,int 4个字节,long8个字节

以long为例,long会占8*8=64个位,转成10进制就是19位。如果想表达更大的数字就需要用biglnteger

以下内容专业针对大数处理方法讲解笔记 ,这儿要用到一个类 Biginteger,

 

常用方法:

1) public BigInteger(int unm,Random rnd) 获取随机最大整数。备注第一个参数是多少次数,第二参数是随机产生0-2的基数,

2)public BigInteger(String val ) 获取指定大整数

3)public BigInteger(String val, int readix)获取指定进制的大整数,第一个参数必须是进制吻合,比如“100100100” 第二个参数是时制,如果第一个参数不能进制无关,会报错,比如“153”这个数字

示例代码:

BigInteger bd1 = new BigInteger(4,new Random()), //生成随机数的4次方

示例三,(new BigInteger和静态构造valueOf 的区别)

1)使用BigInteget静态方法将一个普通数转换成BigInteger类型,这个方法最大参数类型为long,

优化-16 - 16 数字也提前创建在内部,所以BigInteger.valueOf(16) == BigInteger.valueOf(16)

BigInteger d5 = BigInteger.valueOf(100); System.out.println("d5")

其他相关知识,打印Long.max_value 最大值 ,System.out.println(Long.MAX_VALUE)

2)使用new BigInteger(“888888888888888888888”)可以不受Long 影响

常用方法名:(BigInteger 本身不可变,所以fooa.add(foob))fooa的值并不会变,产生的值作皇返回到另一个值

image-20230429173720520

以上结果仍返回1,说明a没有变,

注意说明,如果我们要的值没有超出long范围,可能用静态方法获取,如果超出long范围,可能用构造方法获取。对象一旦创建,就在内存中值不可变。

下面关于BigInteget常有方法介绍介绍:

image-20230429174722342

关于数字不精确问题

new BigDecimal(0.01) 小数位很大,不精确,将值改为字符串可以更精确,示例代码

new BigDecimal("0.4")

通过静态获取对象 BigDecimal.valueOf(10);

细节,如果表示的数字不大,没有超出doble 建议命用静态方法,如果数值太大,请使用new方法

正则表达式之java实现

示例一,非正则表达式编写检查一个字符是否是一个QQ号

思路:先判断长度,再判断不否0开头,再判断是全是数字。判断字符长度可能用len.length(), 判断是是全是字符可能用charAt(i)是否是在0-9之间的acsll码

代码如下:以下方法只是示例,感觉代码又长又不看,工作中用正则完成,

 

正则实现检查的的代码只有二句,

String qq = "309657788";

System.out.println(qq.matches("[1-9]\d{5-19}"))

示例二,区配一个字符串“ab”的正则 “ab.matches(abc)”

image-20230429203350815

 

特殊字符&& 并且 一个& 只能代表一个字符,【^】取反,排除的意思,大致和前端的正则一样,纯属复习,预定义字符 \d 代表数字 \D非数字 \s 空白字符, \S非空白 \w 字符 \W非字符

image-20230429204624976

 

 

正则示例

判断邮箱正则和24小时间 格式 ,写法参考,本没有什么技术量,主要复习[01]括号中限定字符段一般是有一个下划线,[0-9]这样的写法,但是只有二个数的话不用这样写[01]就可以了,一下子容易感觉陌生的写法,复习记录一下。

image-20230429211215444

 

验证用户名是否合则 ,用户名是要求大小写字母,可以有下划线,长度为4-16,

String regx = "//w{4-16}"

身份证正则,第一位不能是0 长度16 后面可以是x或X

String regd = “[1-9]\d{16}(\d|x|X)” 实际还要考虑中间的年月日区配,完整的身份证区配如下

image-20230429212510251

实战部份

学习爬虫基础,本示例编写一个最简单的爬虫示例,这儿功能主要通过要求获取指定的数据,在编写爬虫前先来复习怎么截取字符串,假设有一串字符串如下:

String str = xsy,rs java8 java9 ""

编写一个正则:

Pattern p = Pattern.compile("java\d{0,2}")

正则的matcher 指定区配

Mather m = p.matcher(str)

find方法如果没有找返回false 如果找到了底层开始记录索引起始和结索+1

boolena b= m.find();

String s1 = m.group();根据索引获取字符。

while(m.find()){

String s = m.group();

System.out.pringln(s)

}

通过以上的核心的代码演示了正则怎么区配和获取字符串,现在来编写一个简单的爬虫,首页第一步我们要网络读取网络内容,需要用到网络技术,假设一个网站叫润生网站,里面有一个页面内容是很多人的身份信息,这儿关健是网上的内容,我们需要一行一行的读取,会用到行读取器,幸好java帮我们写好了行读取器的方法,这儿核心代码主要三句,在上面有先预习,其它部份代码为行读取器和网络发送请求,每周复习一次,就可以深刻记住。

image-20230429215824787

这儿默认是就是贪婪区配,如果不贪婪需要在后面加一个问号,比如 String regs = "ab+?"

以下 代码是没有加 ?,所以获取取了多个b

image-20230429235856955

分组与组号,,正则如果需要对某些字段单独设正则是要加括号,否则会变成全局,分组可以加序号引用,,可以省写法,例如:以下第四项image-20230430074513048

分组引用,可以用于判断二串相同的字符串是否一样。正则中//1可以引用分组,在正则外面用$引用

image-20230430081451025

String result = str.replaceAll("(.)\1+","$1")非捕获分组,就是只为分组不捕获(?:)(?=)

 

 

4-30号继续

java时间总结 jdk7t jdk8

jdk7 低版本相关知识点: (Date SimpleDateFormat Calendar)

jdk8版本新功能知识点:(ZoneId Instant ZoneDateTime DateTimeFormatter LocalDate LocalTime LocalDateTime Duration period ChronoUnit )

基本理伦,全世界的时间有一个统一标准计算叫格林尼时间简称MGT,根据地球自转子午线来区分区

但是由于误差太多,不在作为标准时间。2012年以取消用了一百多年的格林时间,使用原子钟算法。简称(UTC)

常用方法 本包位于java.ulit

public Date() 这个方法可以直接调用,或者加一个数字,这个数字表过过了多久,比如new Date(10L) 表示1970年的基本时间加上10毫秒

Public Date(long date)

public void setTime(long time) 这个方法是从原点过了多少时间,

public lone getTime()

编写获取一年后的时间
       Date d1 = new Date(0L);   //写0L表示从1970开始
       long time = d1.getTime();
       time = time*1000L*365*24*60*60;  //一年360天,每分60秒,每小时60分
       d1.setTime(time);

创建随机时间

//创建随机时间
    Random r  = new Random();
    Date d1 = new Date(Math.abs(r.nextInt()));

由于java获取的时间格式格式不容易看,例示获取的格式为Thu Jan 01 08:00:00 CST 1970

所以需要格式化显示才容易观看,需要引用simpleDateFormat,SimpleDateFormat 主要有二个功能,第一就是格式化,第二就是解析。

解析,就是给一字符串,会解析成日期

格式化就是给一个日期,可以格式成字符串 默认格式为:

年月日上午还是下午几点 2023/10/1 上午08:30

更改格式方法:new simpleDateFormat("yyyy年MM月dd日 HH:mm:ss")

关于更多参数,官方文档核心参数如下:

image-20230430092928260

//     示例将一个表示出生年有字符转成另一种格式的,
//     比如2001-10-12 转成2001年10月,要实现这程或功能方法很多。
//     这儿要求用日格类完成
       String str = "2002-11-11";
       //定义二个不同格式
       SimpleDateFormat d1 = new SimpleDateFormat("yyyy-MM-dd");
       SimpleDateFormat d2 = new SimpleDateFormat("yyyy年MM月dd日");
//       将str通过格式转成日期  
       Date date = d1.parse(str);
//       通过d2的格式化将日期转成另一种格式
       String result = d2.format(date);
//       打印输出
       System.out.println(result);

 

第三部份 Calendar常用方法,Calendar功能很多和date一样,都 可以获取时间毫秒,多了增加日期年月日 的增加或减少,它是一个抽象类,不能直接naw 只能通过静态方获取到子类对象。

底层原理,根据系统时区获取不同的日历对象。会把时间中的纪元年月日放到一个数组之 中,

数组中月份范围是-0-11 也就是0月其实是1月,11其实是12

关于星期,1表示星期天,2表示星期一,给中国有点不一样,在我中国周末是属于上一星期,

可能通过数组索引来获取对象比如获取年用c.get(1),也可能用c.get(Calendar.YEAR) Calendar还提供set 和add 对于日历对象的修改和增加数值 , ,

Calendar c = Calendar.getInstance();
System.out.println(c);

image-20230430101542626

jdk8新方法,

新方法解决线程安全和性能更快,提供更多的方法,比如计算时间比较时间,更细化的方法,

ZoneId 时区,(用于获取时区,设置时区,)

Instant 时间戳

(获取当前时间)Instant.now()

根据毫秒获取毫秒 Instant.ofEpochMilli()

根据秒获取 Instant.ofEpochSecond(1L),

根据秒加纳秒 Instant.ofEPochSecond(1,1000);

指定时区:由于zoneid的获取时间方法次是静态,所以需要用

Instant.now().atZone(ZoneId.of("Asia/Shanghtai"))

instant.isAfter() 是否在前

instant.isBefore()是否在后

 

 

ZoneDateTime 带时区时间

DateTimeFormatter 新版本格式化和解析

LocalDate 年月日

LocalTime 时分秒

LocalDateTime 年月日 时分秒

Duratin 时间间隔秒

Period 时间间隔年月日

ChronoUnit 时间间隔所有单位

以下根据功能分类,分为四个类,

image-20230430111415334

 

修改时间年月日,备注日期对象是不可变的所谓修改其实是内部返回一个对对象

Instant instant = Instant.ofEpochMilli(0l)

Zoneid zoneid = ZoneId.of("Asia/Shanghai")

ZonedDateTime time2 = ZonedDateTime.ofinstant(insant,zoneid)

ZonedDateTime time3 = time2.withYear(2000);

System.out.pritnt(time3)

关于更多修改年月日 小时的方法见以下图

image-20230430133951763

日历类 Calender 在jdk8的日历类为localDate LocalTime LocalDateTime其中LocalDate获取年月日星期几,

image-20230430134628523

MonthDay是一个新类,可能传入月日生成一个几月几日的对象,

image-20230430135102368

LocalTime是一个针对时分秒外理的类。它的方法几乎和LocalDate一样,只是外理的单位不一样

image-20230430135458454

最后一个类间隔,主要功能是根据二个对象算出间隔年月日

image-20230430135731456

关于年月日间隔的方法很多,以下复制一些常用方法

 

标签:BigInteger,java,复习,基础,获取,正则,new,String
From: https://www.cnblogs.com/fgxwan/p/17365219.html

相关文章

  • 软构笔记-Java Swing学习
    JavaSwing教程JavaSwing是Java平台的一个GUI工具包,提供了各种组件和工具类,用于创建漂亮的用户界面。安装JavaSwingJavaSwing是Java标准库的一部分,因此无需安装额外的软件包。只需要安装Java开发工具包(JDK),就可以开始使用JavaSwing开发GUI应用程序了。创建......
  • IDEA报错:Internal error :java.lang.illegalAccessErrorjiang
    IDEA报错:Internalerror:java.lang.illegalAccessErrorjiang报错Internalerror:java.lang.illegalAccessErrorjiang原因及解决方法今天在IDEA运行一个新项目时发生了这个报错,原因是该项目使用较新的JDK17版本,而我一直使用的IDEA2019.3.5不支持JDK17,将IDEA版本更换为2021.2.......
  • Java根据Integer数组(有null值)递归构造二叉树
    二叉树:publicclassTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.val=val;}TreeNode(intval,TreeNodeleft,TreeNoderight){this.val=val;this.l......
  • java-正则表达式判断手机号
    要更加准确的匹配手机号码只匹配11位数字是不够的,比如说就没有以144开始的号码段,故先要整清楚现在已经开放了多少个号码段,国家号码段分配如下:移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188联通:130、131、132、152、155、156、185、186......
  • Spark安装部署与基础实践
    安装java运行命令sudoaptinstallopenjdk-8-jdk-headless进行安装运行java-version测试安装是否成功,结果如下,安装成功安装Spark运行wgethttp://mirror.bit.edu.cn/apache/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz下载spark运行tar-xzvfspark-2.4.5-bin-......
  • Java二维数组
    二维数组二维数组的应用场景:但我们需要把数据分组管理的时候,就需要用到二维数组二维数组初始化:1、静态初始化:格式:数据类型[][]数组名=new数据类型[][]{{元素1,元素2},{元素1,元素2}};eg:int[][]arr=newint[][]{{11,22},{33,44}}简化格式:数据类型[][]数组名={{元素1......
  • 【c++基础】程序运行时间计时
    使用std::chrono计算程序运行时间#include<iostream>#include<string>#include<chrono>voidRun(){ for(inti=0;i<1000000000;++i) { }}intmain(){ autobeforeTime=std::chrono::steady_clock::now(); Run(); autoafterTime......
  • java io流 高级流
    转换流是字符流和字节流之间的桥梁转换输入流InputSteamReader转换输出流OutputStreamWriter作用1:指定字符集读写(JDK11之后淘汰)JDK11之后可直接用字节流的构造方法//指定GBK的编码读取数据FileReaderfr=newFileReader(FilefileName,Charset.forName("GBK......
  • javaScript基础之 --- 作用域和闭包
    本文是我学习《你所不知道的javaScript上卷》的读书笔记的整理。更多详细内容,请微信搜索“前端爱好者“,戳我查看。作用域和闭包作用域是什么javaScript工作原理中的角色引擎-从头到尾负责整个javascript程序的编译及执行过程编译器-负责语法分析及代码生成......
  • 【模板方法设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介模板方法模式(TemplateMethodPattern)也叫模板模式,是一种行为型模式。它定义了一个抽象公开类,包含基本的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构,只是重定义该算法的某些特定步骤。不同的子类以不同的方式实现这些抽象方法,从而对剩余的逻辑有......