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("出现非法字符");
}
}
else
System.out.println("不可以0开头");
}
else
System.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("出现非法字符");
}
}
else
System.out.println("不可以0开头");
}
else
System.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.com
String str3 = str.replaceAll("w","x");
System.out.println(str3);//xxx.baidu.com
String str4 = str.replaceAll(".", "x");
System.out.println(str4);//wwwxbaiduxcom
String 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。
示例: