目录
- String类
- 常用方法
- String类的equals()方法
- String中equals()源码展示
- “==”和equals()有什么区别呢?
- StringBuffer类
- 常用构造方法
- 常用方法
- 代码示例
- 面试题:String类、StringBuffer类和StringBuilder类的区别?
- 日期类
- Date类
- Calendar类
- 代码示例
String类
String s = new String(“Hello World”); ?//创建了几个对象
答案是:两个,s和“Hello World”
String类是final修饰的,每次修改引用的值,都会创建一个新的对象出来
常用方法
public static void main(String[] args) {
String word = "HelloWorld!!!你好世界!!!";
//1.返回word这个字符串第一个字符是什么?
char firstCh = word.charAt(0);
//1.返回word这个字符串最后一个字符是什么?
char lastCh = word.charAt(word.length()-1);
System.out.println("第一个字符是 : " + firstCh);
System.out.println("最后一个字符是 : " + lastCh);
System.out.println("---------------------------------------");
String str = "Hello";
//将world!!!拼接到这个字符串后面
//String newStr = str.concat("world!!!");
str += "world!!!";
System.out.println(str);
System.out.println("----------------------------------------");
String code = "public static void main(String[] args){}";
boolean flag = code.contains("static");
System.out.println("是否存在static?" + flag);
boolean flag2 = code.contains("z");
System.out.println("是否存在字母z? " + flag2);
System.out.println("----------------------------------------");
String yanzhengCode = "sKdgF5";
String input = "skdgf5";
System.out.println(yanzhengCode.equalsIgnoreCase(input));
System.out.println("----------------------------------------");
String email = "18037678296@163.cn.com";
int firstPointIndex = email.indexOf(".");
int lastPointIndex = email.lastIndexOf(".");
System.out.println("\".\"第一次出现的索引位置是:" + firstPointIndex + ",最后一次出现的索引位置是:" + lastPointIndex);
int qqIndex = email.indexOf("qq");
if(qqIndex < 0){
System.out.println("这不是一个QQ邮箱,因为邮箱地址中没有\"qq\"这个字符串");
}
System.out.println("这个邮箱的长度是:" + email.length());
}
public static void main(String[] args) {
String uuid = UUID.randomUUID().toString();
System.out.println("生成的唯一序列是:" + uuid);
//将UUID中的-去掉
//uuid = uuid.replace("-","^");
uuid = uuid.replace("-","");
System.out.println("替换后的UUID是:" + uuid);
System.out.println("-----------------------------");
String musicWords = "虞美人 /蒋捷 少年听雨歌楼上 红烛昏罗帐 中年听雨客舟中 江阔云低 断雁叫西风 而今听雨僧庐下 鬓已星星也 悲欢离合总无情 一任阶前 点滴到天明";
String[] words = musicWords.split(" ");
for (String word : words) {
System.out.println(word);
}
System.out.println("-----------------------------");
String str = "四十年来家国,三千里地山河。凤阁龙楼连霄汉,玉树琼枝作烟罗。几曾识干戈?";
String lastWord = str.substring(str.lastIndexOf("。")+1);
System.out.println("最后一句诗是:" + lastWord);
String secoundWord = str.substring(str.indexOf("。")+1,str.lastIndexOf("。")+1);
System.out.println("第二句是:" + secoundWord);
System.out.println("-----------------------------");
String s = "HelloWorld!!!";
char[] chars = s.toCharArray();
for (char aChar : chars) {
System.out.print(aChar + " ");
}
System.out.println();
System.out.println("-----------------------------");
String t = "kjdsfSDLKSG41654";
System.out.println(t.toLowerCase());
System.out.println(t.toUpperCase());
System.out.println("-----------------------------");
String u = " asfkjsdgjh asda a as ";
System.out.println("字符串的长度是:" + u.length());
System.out.println("去掉前后空格后的长度是:" + u.trim().length());
}
String类的equals()方法
equals()方法比较原理(重写了Object类的equals()方法):equals():检查组成字符串内容的字符是否完全一致
String中equals()源码展示
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
“==”和equals()有什么区别呢?
==:判断两个字符串在内存中的地址,即判断是否是同一个字符串对象
equals()是Object中的方法本身也是判断两个字符串在内存中的地址是否是同一个的,但是可以通过重写Object中的equals()方法,比如String重写的equals()方法可以重写为判断两个对象的字符串内容是否相同
StringBuffer类
- StringBuffer类位于java.util包中,是String类的增强类。
- 对字符串频繁修改时,使用StringBuffer类可以大大提高程序执行效率
常用构造方法
StringBuffer strb = new StringBuffer();
StringBuffer strb = new StringBuffer(“abc”);
常用方法
- strb.toString(); //将StringBuffer类型的字符串转化为String类型的对象返回
- strb.append(Object obj); //将参数连接到字符串后并返回
- strb.insert (int offset, Object obj); //将参数插入到字符串指定位置后并返回
代码示例
public static void main(String[] args) {
String s = "HelloWorld,Hello";
StringBuffer sb = new StringBuffer(s);
sb.append("KGC");
sb.append(",");
sb.append("Hello");
sb.append("KD50");
sb.append("!!!");
System.out.println(sb.toString());
sb.insert("HelloWorld".length(),"!!!");
System.out.println(sb.toString());
/*sb.replace(sb.lastIndexOf("!!!"),sb.lastIndexOf("!!!")+3,"...");
System.out.println(sb.toString());*/
/* sb.delete(sb.lastIndexOf("!!!"),sb.lastIndexOf("!!!")+3);
System.out.println(sb.toString());*/
/*sb.delete("elloWorld!!!,".length()+1,"HelloWorld!!!,HelloKGC".length());
System.out.println(sb.toString());*/
System.out.println("---------------------------");
StringBuffer money = new StringBuffer("9876543210");
for (int i = money.length()-3;i>0;i-=3){
money.insert(i,",");
}
System.out.println(money.toString());
//reverse()反转字符串
}
面试题:String类、StringBuffer类和StringBuilder类的区别?
- String是不可变对象,在每次对String类型进行改变时其实都等同于生成了一个新的String对象,然后再指向新的String对象。经常改变内容的字符串最好不要使用String,因为每次生成对象都会对系统性能产生影响。
- StringBuffer是可变的字符串,在每次对StringBuffer对象进行改变时,会对StringBuffer对象本身进行操作,而不是生成新的对象。字符串经常改变的情况可使用StringBuffer,执行效率要比String类高
- JDK5.0后提供了StringBuilder,等价StringBuffer 。
StringBuilder与StringBuffer的区别:StringBuffer类是线程安全的, StringBuilder类是单线程,不提供同步,理论上效率更高
日期类
- java.util包中提供的和日期时间相关的类有Date类、Calendar类
- java.text包中提供将日期转换为文本的类有SimpleDateFormat类
Date类
//创建日期对象
Date date = new Date();
//定制日期格式
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss");
//调用方法将日期格式化为文本
String now = sdf.format(date);
System.out.println(now);
Calendar类
- Calendar类是抽象类:用于设置和获取日期/时间数据的特定部分
- Calendar类提供一些方法和静态字段来操作日历
代码示例
public static void main(String[] args) {
//创建Calendar对象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
System.out.println(calendar.get(Calendar.WEEK_OF_MONTH));
System.out.println(calendar.get(Calendar.WEEK_OF_YEAR));
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH) + 1);
System.out.println(calendar.get(Calendar.DATE));
System.out.println(calendar.get(Calendar.HOUR));
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.SECOND));
}
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2024,11,19);
Date date = calendar.getTime();
System.out.println(date);
System.out.println("--------------------------");
Calendar calendar2 = Calendar.getInstance();
//calendar2.add(Calendar.MONTH,-1);
//calendar2.add(Calendar.WEEK_OF_MONTH,-1);
//calendar2.add(Calendar.DATE,-1);
calendar2.add(Calendar.DATE,5);
System.out.println(calendar2.getTime());
System.out.println("--------------------------");
long time = System.currentTimeMillis();
System.out.println(time);
}