1 java.lang.String
面试题String对象的内存地址?
答:String对象不是一个基本类型,实例化方式有两种,第一种String s=”abc”; 在方法常量池中分配一个字符串常量”abc”, s变量存储地址引用,s存储在栈;第二种String s=new String(“abc”); 在堆内存分配空间存储”abc”,s存储地址引用,s s存储在栈;
String s1=”abc”;
String s2=”abc”;
System.out.println(s1==s2);//true
String s1=”abc”;
String s2=new String(”abc”);
System.out.println(s1==s2);//false
String s1=”abc”;
String s2=”ab”+”c”;
System.out.println(s1==s2);//true
String s1=”abc”;
String s2=”ab”;
s2+=”c”;//相当于new String(“abc”);
System.out.println(s1==s2);//false
2 String的API
split方法支持正则表达式分割;
先了解正则;正则在java应用;
3 正则表达式
作用匹配字符串,利用正则提供特殊符字符组成匹配字符串用于复杂字符串匹配;
正则中字符的分类
①普通字符
②非打印字符
\n \t
③特殊字符,就是一些有特殊含义的字符
4 java中应用正则
4.1 利用java匹配模板、 比对对象验证正则表达式
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo2 {
public static void main(String[] args) {
//java支持正则对象
//通过javaPattern对象编译正则表达式,形成模板
Pattern pa=Pattern.compile(".");
//通过模板创建匹配对象
// pa.matcher("被匹配字符串");
Matcher ma = pa.matcher("E");
//通过匹配对象验证正则模板和abc字符串是否匹配
boolean b = ma.matches();
System.out.println(b);
}
}
4.2 String对象中使用正则表达式的方法
String replaceAll(“正则表达式”,”替换的字符串”)
String[] split(“查找并按正则拆分的字符串”)
boolean matchs(“正则表达式”)
5 StringBuilder,StringBuffer
由于String对象实际存储字符串常量,每次对字符串的修改(+=, split, replace,replaceAll,substring) 都生成新字符串,为了修改字符串性能提高使用StringBuilder和StringBuffer;
例如StringBuffer的初始化
线程安全,可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。
实例化:
StringBuffer buf=new StringBuffer();//在堆中实例化一个字符串缓冲区对象
//StringBuffer可以和String对象进行转换
String对象转换成StringBuffer
StringBuffer buf=new StringBuffer(“ok”);
StringBuffer对象转换成String
String k=buf.toString();
StringBuffer和StringBuilder提供直接在当前实例化内存对象上修改能力;
例如:
//实例化缓冲区对象
StringBuffer buf=new StringBuffer();
//1 添加数据
StringBuffer s2 = buf.append(8);
StringBuffer s3 = buf.append("abc");
buf.append(new int[]{3,6,9});
//将缓冲区对象转换成字符串
String str = buf.toString();
System.out.println(str);
//2 删除
buf.delete(2,buf.length());
System.out.println(buf.toString());
//3 插入
// buf.insert(整数型的插入索引,插入的对象)
buf.insert(1,"你好");
System.out.println(buf.toString());
//4 修改
// buf.replace(起始索引,结束索引,替换字符串)
buf.replace(1,3,"平方");
面试:
String、StringBuilder和StringBuffer的区别?
答:String存储字符串常量,每次修改生成新字符串常量;而StringBuilder和StringBuffer创建一个对象后,修改都是在原对象上修改,修改性能快;StringBuffer中方法都是线程安全的;StringBuilder对象中的方法都是非线程安全;
java包装类
1包装类基本概念:
针对java8中基本类型提供包装类java.lang, 提供对应基本类型和包装器类型的转换,包装类提供和String直接转换;
byte----------java.lang. Byte
short--------- java.lang.Short
int------------ java.lang.Integer
long--------- java.lang.Long
float-------- java.lang.Float
double----- java.lang.Double
char-------- java.lang.Character
Boolean--- java.lang.Boolean
2 用法:
2.1 包装对象初始化
例 //将基本数据类型转换成包装对象
int age=8;
Integer it=new Integer(age);
//jdk1.5 自动装箱
Integer it2=88;//88是基本类型,自动调用new Integer
//将字符串类型转换Integer类型
Integer it3=new Integer("66");
//在jdk1.5前将包装对象转换基本数据类型
int x1=it.intValue();
long x2=it.longValue();
//字符形式的数值,转换int
int x4=Integer.parseInt("36");
//在jdk1.5以后 能够将包装自动拆分为基本类型
int x3=it3;//自动拆箱
//自动拆箱
int x5=new Integer("66");
String s4=new StringBuilder(8).toString();//StringBuffer(初始化容器大小)
System.out.println("s4:"+s4);//返回””
2.2 验证当前单个字符的分类
例如:统计字符串中大小字母和数字的个数
String str="afdaRTf2134asdf1324aFGf";
int x,y,z;
x=y=z=0;
//按下标将字符串遍历
for (int i = 0; i < str.length(); i++) {
char ch=str.charAt(i);
/*if(ch>='A'&&ch<='Z'){
x++;
}*/
if(Character.isDigit(ch)){
x++;
}else if(Character.isUpperCase(ch)){
y++;
}
}
===============================================================================
java工具类
1概念
java中工具类位于java.util包
java.util.Arrays 数组辅助类,提供静态方法用于数组操作,sort,toString,binarySearch
java.util.Random随机类
java.util.Date日期类型
例 格式化日期
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo2 {
public static void main(String[] args) {
Date da=new Date();
//使用java.text日期格式对象
SimpleDateFormat sim=new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒SSS");
String sda=sim.format(da);
System.out.println(sda);
//jdk1.8更新版本
LocalDate ldate=LocalDate.now();
System.out.println(ldate);
}
}
例如 将字符串转换Date对象
String str="2018年07月30日";
SimpleDateFormat sim=new SimpleDateFormat("yyyy年MM月dd日");
try {
//从字符串转换成Date对象
Date da=sim.parse(str);
System.out.println(da);
} catch (ParseException e) {
e.printStackTrace();
}