java面试题:
== 和 equals 的区别是什么?
- 对于基本类型,==比较的是值;
- 对于引用类型,==比较的是地址;
- equals不能用于基本类型的比较;
- 如果没有重写equals,equals就相当于==;
- 如果重写了equals方法,equals比较的是对象的内容;
1.包装类
自动装箱:基本类型的数据和变量可以直接赋值给包装类型的变量
自动拆箱:包装类型的变量可以直接赋值给基本数据类型的变量
int a = 5;
Integer b = 10;
b = a;
a = b;
System.out.println(a);
System.out.println(b);
包装类的功能:
- 包装类的变量默认值为null,容错率更高
- 基本类型的数据转换成字符串类型
Integer aa = 1024;
String r = aa.toString();
System.out.println(r.toString());
String r1 = Integer.toString(1024);
System.out.println(r1);
String r2 = 1024 + "";
System.out.println(r2);
- 字符串类型转换成数字类型
Integer b1 = Integer.parseInt("1024");
double b2 = Double.parseDouble("1024.1");
Integer b3 = Integer.valueOf("1024");
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
我们可以用各自包装类的方法将字符串类型转换成相应的数字类型。
注意:这里的数据类型必须相匹配,比如“11.1”不能转换成int类型,只能转换成double或者float类型,否则会报错。
2.正则表达式
作用:
可以通过正则表达式来校验数据格式的合法性
例子:
判断字符串的长度以及取值是否符合要求。
1.自定义方法:
public static void main(String[] args) {
//校验数字格式,位数必须为11-16位
System.out.println(check("12345689211"));
System.out.println(check("z12345689"));
System.out.println(check("123"));
System.out.println(check(null));
}
public static boolean check(String ip){
//判断长度是否满足
if(ip == null || ip.length()<11 || ip.length()>16) {
return false;
}
//判断是否全部为数字
for (int i = 0; i < ip.length(); i++) {
char c = ip.charAt(i);
//判断c是不是数字
if(c<'0' || c>'9'){
return false;
}
}
return true;
}
2.正则表达式方式
public static void main(String[] args) {
//正则表达式
System.out.println(chekcRe("12345689211"));
System.out.println(chekcRe("z12345689"));
System.out.println(chekcRe("123"));
System.out.println(chekcRe(null));
}
public static boolean chekcRe(String ip){
//\d是判断是否全部是数字,第一个\用来转译第二个\
return ip != null && ip.matches("\\d{11,16}");
}
3.匹配规则
例子:
基础字符匹配
public static void main(String[] args) {
System.out.println("a".matches("\\d"));
System.out.println("1".matches("\\d"));
System.out.println("123".matches("\\d"));
System.out.println("1".matches("\\w"));
System.out.println("123".matches("\\w"));
System.out.println("好".matches("\\W"));
System.out.println("你好".matches("\\W"));
}
如果不使用贪婪量词,那么每次我们只能匹配一个字符
匹配验证码
//验证账号,只能由数字,字母,下划线组成,且长度在6-20
System.out.println("asdxcw_54".matches("\\w{6,20}"));
//验证码只能是数字或字符,长度为4
System.out.println("1234".matches("[0-9a-zA-Z]{4}"));
System.out.println("12345".matches("[0-9a-zA-Z]{4}"));
System.out.println("12a5".matches("[0-9a-zA-Z]{4}"));
System.out.println("zxc_".matches("[0-9a-zA-Z]{4}"));
System.out.println("zxc_".matches("[\\w&&[^_]]{4}"));
System.out.println("zxA1".matches("[\\w&&[^_]]{4}"));
4.正则表达式常见案例
校验手机号 邮箱 电话号
public static void checkTel(){
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入您的电话号");
String Tel = scanner.next();
//电话验证 012-8426579 0128426579
if (Tel.matches("0\\d{2,6}-?\\d{5,20}")){
System.out.println("电话格式正确");
break;
}else {
System.out.println("格式有误!");
}
}
}
public static void checkEmail(){
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入您的邮箱");
String phone = scanner.next();
//邮箱验证
/*
*验证邮箱类型
* 123@qq.com
* zxcs_@163.com
* xzcsadwqfcxccafsa@pci.com.cn
*/
if (phone.matches("\\w{1,30}@[0-9a-zA-Z]{2,20}(\\.[0-9a-zA-Z]{2,20}){1,2}")){
System.out.println("邮箱格式正确");
break;
}else {
System.out.println("格式有误!");
}
}
}
public static void checkPhone(){
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入您的手机号");
String email = scanner.next();
//手机号验证
if (email.matches("1[3-9]\\d{9}")){
System.out.println("手机格式正确");
break;
}else {
System.out.println("格式有误!");
}
}
}
5.正则表达式的使用
分割字符串
String names = "张三qwexzf李四123zxcas王五";
String[] name = names.split("\\w+");
for (String s : name) {
System.out.println(s);
}
替换字符串
String s = names.replaceAll("\\w+", " ");
System.out.println(s);
6.正则表达式爬取信息
根据信息爬取手机号 电话号 以及邮箱信息
public static void main(String[] args) {
String index = "手机号信息:13333333333 15555555555 18888888888" +
"邮箱信息:12@qq.com s123@163.com sdjkaxh@pci.com.cn 400-100-3233" +
"电话号码: 021-1584654 0215412111 0214511111";
//爬取电话号码,邮箱以及手机号
String regex = "(0\\d{2,6}-?\\d{5,20})|(\\w{1,30}@[0-9a-zA-Z]{2,20}(\\.[0-9a-zA-Z]{2,20}){1,2})" +
"|(1[3-9]\\d{9})|(400-?\\d{3,9}-?\\d{3,9})";
//将爬取规则编译成匹配对象
Pattern pattern = Pattern.compile(regex);
//获取一个容器来存取匹配对象
Matcher matcher = pattern.matcher(index);
//开始匹配
while (matcher.find()){
String re = matcher.group();
System.out.println(re);
}
}