int和integer有什么区别

区别1:类型不同

Integer是int的包装类;
int是基本数据类型;

区别2:实例化引用不同

Integer变量必须实例化后才能使用;
int变量不需要;

区别3:存储位置不同

Integer是对象的引用,指向此new的Integer对象;
int是直接存储数据值

区别4:存储默认值不同

Integer的默认值是null;int的默认值是0。

int和integer的转换成为封箱和拆箱;

装箱:

就是将一个基本数据类型转换为包装类的过程。

比如:int转换为Integer

int i=333;
Integer I=Integer.valueOf(i);

装箱又分为手动装箱和自动装箱

手动装箱需要调用包装类valueOf()方法,返回的是对象。
自动装箱是对.valueOf()的隐藏式调用,Java虚拟机自动转换;

例如:

Integer I=10;
Character Ch=‘b’;

拆箱:

就是将一个包装类转换成基本数据类型的过程;

比如:将Integer转换为int类型

Integer In=10;
int a=In.intValue();

拆箱分为自动拆箱和手动拆箱

booleanValue() Boolean转为boolean
bytevalue() Byte 转为 byte
shortValue() Short转为 short
intValue() Integer转为int
longValue() Long转为long
floatValue() Float转为float
doubleValue() Double转为double
charValue() Character转为char

手动拆箱:就是显示的调用拆箱方法

比如:

Boolean a=new Boolean(false);
boolean a1=a.booleanValue();

自动拆箱:隐式调用拆箱方法
比如:

Integer j=10;
int i=j++;

正则表达式详解 切割

正则表达式是一种用于模式匹配和替换的规范;
比如正则表达式:

^[1-9]\d{5}$ 表示QQ号码

一个正则表达式就是由字符以及特殊字符组成的文字模式;

功能:

对字符串进行查找、提取、分割、替换等工作

在java中定义的任何一个字符串都可以作为正则表达式使用

判断字符串是否匹配正则表达式的方式

  • 方式一

1 将一个字符串编译成Pattern对象。


Pattern p = Pattern.compile(正则表达式);

2 使用Pattern对象创建Matcher对象

Matcher m = p.matcher(要匹配的字符串);

3 调用Matcher类的matches()方法

m.matches() 返回true表示匹配,返回false表示不匹配。
  • 方式二

使用Pattern下的静态方法 matches()。

Pattern.matches(正则,字符串)

示例代码

String regex = "abc";
String str = "abc";
System.out.println(Pattern.matches(regex, str));
  • 方式三

String类下提供了直接匹配的方法。

str.matches(正则)

正则表达式常用符号

  • 预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
  • Greedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好n次
X{n,} X,至少n次
X{n,m} X,至少n次,但是不超过m次

正则的匹配功能

需求:校验QQ号,要求:必须是5~15位数字,0不能开头。
  • 没有正则表达式之前
 public static void checkQQ(String qq){int len = qq.length();if(len>=5 && len <=15){if(!qq.startsWith("0")){try{long l = Long.parseLong(qq);System.out.println("qq:"+l);}     catch (NumberFormatException e){System.out.println("出现非法字符");}}elseSystem.out.println("不可以0开头");}elseSystem.out.println("QQ号长度错误");}
  • 使用正则表达式
public static void checkQQ2(){                                     String qq = "12345";              String reg = "[1-9][0-9]{4,14}";  boolean b = qq.matches(reg);      System.out.println("b="+b);
}

####正则的切割功能

需求1:根据空格对一段字符串进行切割。
public static void testSplit(){                                                                                           String str = "-1     99    4    23";                           String[] arr = str.split(" +");                         for(String s : arr){                                                       System.out.println(s);                              }
}
需求2:根据重叠词进行切割
public static void testSplit2(){                                      String str = "adqqfgkkkhjppppcat";String[] arr = str.split("(.)\\1+");for(String s : arr){                                  System.out.println(s);         }
}
  • 范围表示
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a到z,而非m到p

单词边界 \b
\b 表示单词边界,除了 \w 中的字符外的其他字符都可以作为单词边界。

例如: “hi.*” 和 “high” 匹配

     "ahi.*" 和  "ahigh" 匹配"a.hi.*"和  "axhigh" 匹配但 "a.\\bhi.*" 和  "axhigh" 不匹配  为什么?

因为**\b**表示单词的边界 空格把 a 和high分成了两个单词 也就是说 high是另一个单词的开始处在边界上,所以就匹配。而x不会把a和high分成两个单词。

正则表达式分组

使用分组解决重复的多个字符;
使用分组:在正则表达式中,使用()来表示分组

所谓分组就是使用小括号将一些项包括起来,使其成为独立的逻辑域,那么就可以像处理一个独立单元一样去处理小括号的内容。

这种分组叫做捕获组,或者叫做反向引用
捕获组指的就是使用**\\组号** 来表示引用前面哪一组中的内容。

比如:

String regex = “((a)(b©))”;
//如何确定分组
//查看向左的括号即可
//第一组:((a)(b©))
//第二组:(a)
//第三组:(b©)
//第四组:©

正则的匹配功能

需求:校验QQ号,要求:必须是5~15位数字,0不能开头。
  • 没有正则表达式之前
 public static void checkQQ(String qq){int len = qq.length();if(len>=5 && len <=15){if(!qq.startsWith("0")){try{long l = Long.parseLong(qq);System.out.println("qq:"+l);}     catch (NumberFormatException e){System.out.println("出现非法字符");}}elseSystem.out.println("不可以0开头");}elseSystem.out.println("QQ号长度错误");}
  • 使用正则表达式
public static void checkQQ2(){                                     String qq = "12345";              String reg = "[1-9][0-9]{4,14}";  boolean b = qq.matches(reg);      System.out.println("b="+b);
}

正则的切割功能

需求1:根据空格对一段字符串进行切割。
public static void testSplit(){                                                                                           String str = "-1     99    4    23";                           String[] arr = str.split(" +");                         for(String s : arr){                                                       System.out.println(s);                              }
}
需求2:根据重叠词进行切割
public static void testSplit2(){                                      String str = "adqqfgkkkhjppppcat";String[] arr = str.split("(.)\\1+");for(String s : arr){                                  System.out.println(s);         }
}

正则的替换功能

String类的replaceAll方法

示例代码

public class Demo13_替换功能 {public static void main(String[] args) {String str = "www.baidu.com";String str2 = str.replace("w", "x");System.out.println(str2);//xww.baidu.comString str3 = str.replaceAll("w","x");System.out.println(str3);//xxx.baidu.comString str4 = str.replaceAll(".", "x");System.out.println(str4);//wwwxbaiduxcomString str5 = str.replaceAll("[a-z]", "x");System.out.println(str5);//xxx.xxxxx.xxx}
}
需求1:替换电话号码为 ******
String str = "联系我:18610637606联系我:13510637606联系我:13810637606联系我:18610637606联系我:17610637606联系我:18910637606";

示例代码

String str = "联系我:18610637606联系我:13510637606联系我:13810637606联系我:18610637606联系我:17610637606联系我:18910637606";String reg = "(\\d{3})(\\d{4})(\\d{4})";String x = str.replaceAll(reg, "$1****$3");
System.out.println(x);
需求2:
String str = “我我我我我我要要要要要要要要要要努努努努努努努力力力力力力”;
// 还原成 “我要努力”

示例代码

public static void main(String[] args) {String str = "我我我要要要要放放放放放放假假假假假假";   // "我要放假"String regex = "(.)\\1+";str = str.replaceAll(regex, "$1");  // $1在正则表达式外取某组中的内容System.out.println(str);
}

1.2正则的获取功能(查找子串)

查找子串同样要由 Pattern 和 Matcher 来完成。

Matcher 下的常用方法 :

  • find() 是否包含匹配正则的子串
  • group() 取出子串
需求:查找字符串中所有四个长度的子串

示例代码

public class Demo1{public static void main(String[] args) {String str = "aaa  abcd     axss  xssdf"; // 找到所有4个长度的子串String regex = "\\b[a-zA-Z]{4}\\b";Pattern p = Pattern.compile(regex);Matcher m = p.matcher(str);while(m.find()){System.out.println(m.group());}}
}

正则转换

contains API源码

 public boolean contains(Object o) {Iterator<E> it = iterator();if (o==null) {while (it.hasNext())if (it.next()==null)return true;} else {while (it.hasNext())if (o.equals(it.next()))return true;}return false;}

split 方法

将一个字符串分割为子字符串,然后将结果作为字符串数组返回

string类的substring()方法

方法简介:

public String substring(int beginIndex)
beginIndex - 起始索引(包括)。

返回一个新的字符串,它是此字符串的一个子字符串。该子字符串从指定索引处的字符开始,直到此字符串末尾。

示例:

“unhappy”.substring(2) returns “happy”
“Harbison”.substring(3) returns “bison”
“emptiness”.substring(9) returns “” (an empty string)

第二种

public String substring(int beginIndex,
int endIndex)

示例:

“hamburger”.substring(4, 8) returns “urge”

smiles".substring(1, 5) returns “mile”
返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
示例:

装箱和拆箱详解 正则相关推荐

  1. java+包装类,装箱和拆箱_Java包装类,装箱和拆箱详解

    下面要给大家讲到的就是Java内置包装类方面的知识,这章主要会讲到Java包装类装箱和拆箱方面的知识,一起来了解一下. Java为每种基本数据类型分别设计了对应的类,这就被叫做是包装类(Wrapper ...

  2. C#中定义装箱和拆箱详解

    1. C#装箱和拆箱是一个抽象的概念. 2. C#装箱是将值类型转换为引用类型:拆箱是将引用类型转换为值类型. 利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与 ...

  3. Java 中的自动装箱和拆箱详解

    自动装箱是 Java 编译器在基本类型和它们对应的包装类之间进行的自动转换.例如,将 int 类型转换为 Integer 类型,将 double 类型转换为 Double 型等等.如果转换以相反的方式 ...

  4. java中的装箱和拆箱详解

    什么是装箱和拆箱 装箱就是自动将基本数据类型转换为包装器类型. 拆箱就是自动将包装器类型转换为基本数据类型. 装箱和拆箱的原理 自动装箱都是通过包装类的 valueOf() 方法来实现的.自动拆箱都是 ...

  5. 2019-7-9 [JavaSE] String ,StringBuffer,StringBuilder比较 装箱和拆箱 日期类 正则

    文章目录 1.StringBuffer类 方法: 利用StringBuffer开头与结束的时间计算: String ,StringBuffer,StringBuilder比较 2.装箱和拆箱 3.日期 ...

  6. Java基础学习总结(122)——Java八种基本数据类型的包装类及其装箱拆箱详解

    前言 Java语言是面向对象编程语言,但不是纯面向对象语言.其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备"对象"的特性--不携带属性.没有方法可调用. 沿用它们 ...

  7. java的自动装箱_详解Java 自动装箱与拆箱的实现原理

    详解Java 自动装箱与拆箱的实现原理 发布于 2020-7-4| 复制链接 本篇文章主要介绍了详解Java 自动装箱与拆箱的实现原理,小妖觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小妖 ...

  8. 自动装箱自动拆箱java,自动装箱?拆箱?==问题?详解java面试常见的一个问题...

    1:前言 相信大家都在面试中都被问到过一个问题,这个问题也是近年来面试官刁难人比较常见的一个问题,所以也被大家所熟知了,本质上也很简单,但是也是非常基础的一个题目. Integer a = 100; ...

  9. JAVA 入坑教程 | 章节九 详解java的装箱和拆箱

    简单点,代码的方式简单点,装逼的方式请省略,我们又不是演员,别设计那些情节 什么是装箱?什么是拆箱?代码如何展示? 装箱过程是怎样的?拆箱过程是怎样的? 有问题可加入安卓QQ群: 246231638 ...

最新文章

  1. 语雀图片与七牛云之间的迁移同步
  2. 那传说中的P、NP以及NPC问题
  3. 实验9:Problem D: 从点到面
  4. c# 按位与,按位或
  5. 如何用栈实现浏览器的前进和后退?
  6. 【牛客 - 551D】CSL 的字符串(单调栈,思维)
  7. ubnt ER-4添加PON stick模块替换光猫实战
  8. 一款开源且超好用的网站克隆机 HTTrack
  9. pillow图像格式转化和缩放操作
  10. 1+1备份和1:1冗余备份区别
  11. CubeMX中配置外设引脚重映射
  12. c++基础题:判断奇偶数
  13. 计算广告概述【计算广告】
  14. 博弈论学习(二)——完全信息静态博弈
  15. Android Content Provider详解-实现ContentProvider MIME 类型
  16. Error:Module ‘javase‘ production: java.lang.ClassCastException:
  17. 可重入锁_什么是可重入锁?
  18. Linux 基础实战(二)
  19. 三种平摊分析的方法分别为_关于平摊分析、表的扩增、势能分析初步理解
  20. TOJ 3778.Sheldon's Friendship II

热门文章

  1. 前端程序员的几个幽默瞬间!
  2. js数组取最大值最小值,以及小数取整
  3. Android ubuntu20.04 android-ndk-r20b编译 ffmpeg4.2 四大平台
  4. php 公众号 框架 知乎,知乎问答:一年内的前端看不懂前端框架源码怎么办?
  5. 扩展欧几里得算法 有限域上多项式求逆
  6. linxu mp3转aac, aac转mp3, mp4转mp3 mp4转aac
  7. 【2019暑假集训】08.15比赛总结
  8. html5给div设置单边界,纯CSS实现border的0.5px设置
  9. ✅【已更新】3本SCIE期刊被剔除!(附目录↓方法)
  10. 如何监控员工电脑剪贴板并查看记录