String概述
/*
* String概述
java.lang.String 类代表字符串。
字符串:就是一系列字符串起来。
Java程序中所有的字符串文字(例如 "abc" )
都可以被看作是实现此类的实例。
类String中包含了处理字符串的各种API:
获取字符串的长度
提取字符串中的某个字符
截取字符串中的某段字符串。
把字符串转换大小写
对字符串进行分割。
对字符串进行遍历。
创建对象:
构造器:
查看构造器
String() 创建一个空的字符串对象
String(String original) 根据字符串来创建一个字符串对象
String(char[] value) 通过字符数组来创建字符串对象
String(byte[] bytes) 通过字节数组来构造新的字符串对象
String(byte[] bytes, int offset, int length) 通过字节数组一部分来构造新的字符串对象
*/
public class StringDemo01 {
public static void main(String[] args){
// 此时itheima就会自动变成字符串的实例。
// 1.这种是最常用的,也是应该这样用的。
String name = "itheima";
System.out.println(name);
// 2.String() 创建一个空的字符串对象
String name1 = new String();
String name11 = "";
System.out.println(name1);
// 3.String(String original) 根据字符串来创建一个字符串对象
String name2 = new String("itheima");
System.out.println(name2);
// 4.String(char[] value) 可以把字符数组直接转成一坨字符串。
char[] buffer = new char[]{'我','爱','中','国','a','e'};
String rs = new String(buffer);
System.out.println(rs);
// 5.String(byte[] bytes) 可以把字节数组全部转成对应的字符串。
byte[] buffer1 = new byte[]{97, 98, 99, 65, 66, 67};
String rs1 = new String(buffer1);
System.out.println(rs1);
}
}
== 和 equals
import java.util.Objects;
/*
*
* == 只关心两个比较的对象是否是地址相同!
* */
public class StringDemo01 {
public static void main(String[] args){
String pwd1 = "itheima";
String pwd2 = "itheima";
String pwd3 = new String("itheima");
System.out.println(pwd1.equals(pwd2)); // true
System.out.println(pwd1.equals(pwd3)); // true
System.out.println(Objects.equals(pwd1 , pwd2)); // true
String code = "aAB12c";
String sysCode = "aaB12C";
System.out.println(code.equals(sysCode)); // false
// 比较验证码常用!
System.out.println(code.equalsIgnoreCase(sysCode)); // true
}
}
遍历
/*
* 获取功能的方法
public int length () :返回此字符串的长度。
public String concat (String str) :将指定的字符串连接到该字符串的末尾。
public char charAt (int index) :返回指定索引处的 char值。
public int indexOf (String str) :返回指定子字符串第一次出现在该字符串内的索引。
public String substring (int beginIndex) :返回一个子字符串,从beginIndex开始截取字符串到字符
串结尾。
public String substring (int beginIndex, int endIndex) :返回一个子字符串,从beginIndex到
endIndex截取字符串。含beginIndex,不含endIndex。
*/
public class StringDemo02 {
public static void main(String[] args){
String name = "itheima欢迎您";
// 1.获取字符串的长度。
System.out.println(name.length());
// 2.拼接字符串
String rs = name.concat("加入Java世界");
// String rs = name + "加入Java世界";
System.out.println(rs);
// 3.获取字符串中指定索引处的字符。
char ch = name.charAt(3);
System.out.println(ch);
// 4.获取指定字符串在字符串中的首次出现的索引位置,
// 如果不包含这个字符串返回-1
System.out.println(name.indexOf("欢迎")); // 7
System.out.println(name.indexOf("欢迎1")); // -1
// name = "itheima欢迎您"
// 5.从某个索引位置处开始截取剩余全部字符串!
String name1 = "Java是这个世界上极好的语言!";
String rs1 = name1.substring(7);
System.out.println(rs1);
// 6.截取字符串中的一部分字符串
// 参数一:截取的开始索引位置(包含)
// 参数二:截取的结束索引位置(不包含)
String name2 = "Java是这个世界上极好的语言!";
String rs2 = name2.substring(7 ,10);
System.out.println(rs2);
System.out.println(name2.startsWith("Java")); // true
System.out.println(name2.startsWith("java")); // false
System.out.println(name2.endsWith("语言!")); // true
System.out.println(name2.endsWith("语言")); // false
}
}
转换功能的方法
/*
* 转换功能的方法
public char[] toCharArray () :将此字符串转换为新的字符数组。
public byte[] getBytes () :使用平台的默认字符集将该 String编码转换为新的字节数组。
public String toLowerCase() :使用默认语言环境的规则将此 String所有字符转换为小写。
public String toUpperCase() :将此 String所有字符转换为大写,使用默认语言环境的规则。
public String replace (CharSequence target, CharSequence replacement) :将与target匹配的字符串使
用replacement字符串替换 replaceAll
*
*
* */
public class StringDemo03 {
public static void main(String[] args){
String name = "abc我爱你";
// 1.把字符串直接转成一个字符数组
char[] chs = name.toCharArray();
for(int i = 0 ; i < chs.length ; i++ ){
char ch = chs[i];
System.out.print(ch+" ");
}
System.out.println(); // 换行]
String name2 = "锦瑟无端五十弦";
for (int i = 0; i < name2.length(); i++) {
char ch = name2.charAt(i);
System.out.print(ch +" ");
}
System.out.println();
// 2.把字符串小写
String name1 = "ITHeimA欢迎您!LOVE you!";
String rs2 = name1.toLowerCase();
System.out.println(rs2);
// 3. 把字符串大写
String rs3 = name1.toUpperCase();
System.out.println(rs3);
// 5.替换内容!
String str = "我觉得你好sb,你要努力不要做sb,我看好你!";
String rs = str.replace("sb" , "**");
System.out.println(rs);
}
}
分割功能的方法
/*
* 分割功能的方法
* public String[] split(String regex) :将此字符串按照给定的regex(规则)拆分为字符串数组。
*/
public class StringDemo04 {
public static void main(String[] args){
String names = "贾乃亮@陈羽凡,王宝强,武大郎";
String[] nameArrs = names.split(",");
for (int i = 0; i < nameArrs.length; i++) {
String name = nameArrs[i];
System.out.println(name);
}
}
}
StringBuilder概述
/**
* String类是不可变字符串,对字符串的拼接的性能是比较差的,每次都会产生新对象,并指向新对象。导致操作字符串的时候大量浪费内存性能。
* 拼接字符串建议使用StringBuilder,性能好,代码优雅。他都是在一个对象种修改字符串的。
* 目标:StringBuilder/StringBuffer
* StringBuilder概述
* StringBuilder/StringBuffer是一个可变的字符串类,我们可以把它看成是一个容器
* 作用:提高字符串的操作效率,如拼接、修改等。
* 注意:
* StringBuilder和StringBuffer在操作字符串的上的功能是一样的。
* StringBuilder是线程不安全的、性能好。StringBuffer是线程安全的,性能差。(后续了解)
* 我们一般使用StringBuilder。
*
*
* StringBuilder 构造器
* public StringBuilder() 创建一个空白的可变的字符串对象,不包含任何内容
* public StringBuilder(String str) 创建一个指定字符串内容的可变字符串对象
*
*
* StringBuilder常用方法
* 方法名称 说明
* public StringBuilder append(任意类型) 添加数据并返回StringBuilder对象本身
* public StringBuilder reverse() 将对象的内容反转
* public int length() 返回对象内容长度
* public String taString() 通过toString()就可以实现把StringBuilder转换为String
*
*
* StringBuilder构造器
* 名称 说明
* public StringBuilder() 创建一个空白的可变的字符串对象,不包含任何内容
* public StringBuilder(String str) 创建一个指定字符串内容的可变字符串对象
* String --> public StringBuilder(String s)/append --> StringBuilder
*
*
* StringBuilder常用方法
* 方法名称 说明
* public String taString() 通过toString)就可以实现把StringBuilder转换为String
* StringBuilder --> String --> toString()
*/
public class StringBuilderDemo01 {
public static void main(String[] args) {
// 1、构造对象
// sb : ""
StringBuilder sb = new StringBuilder();
// sb1: "itheima"
StringBuilder sb1 = new StringBuilder("itheima");
System.out.println(sb);
System.out.println(sb1);
// 2、拼接(链式编程)
sb.append("黑马").append("Java").append("技术");
System.out.println(sb);
// 反转内容
sb.reverse();
System.out.println(sb);
// 长度
System.out.println(sb.length());
}
}
public class ArraysUtils {
private ArraysUtils(){
}
/**
返回数组内容
*/
public static String toString(int[] arrs){
// 1、拼接内容
StringBuilder sb = new StringBuilder("[");
// 2、遍历拼接元素
for (int i = 0; i < arrs.length; i++) {
sb.append(arrs[i]).append(i == arrs.length - 1 ? "" : ", ");
}
sb.append("]");
return sb.toString();
}
}
public class StringBuilderDemo02 {
public static void main(String[] args) {
int[] arrs = {12, 2, 3, 3, 4, 453, 5, 55};
System.out.println(ArraysUtils.toString(arrs));
}
}
简单日期格式化类SimpleDateFormat解析字符串时间成为日期对象
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
目标:简单日期格式化类SimpleDateFormat解析字符串时间成为日期对象。
引入:
Date日期对象 -> 格式化成 -> 喜欢的字符串时间形式。
时间毫秒值 -> 格式化成 -> 喜欢的字符串时间形式。
字符串的时间形式 -> 解析成 -> Date日期对象。
开发中经常会收到字符串的时间,需要转成Date日期对象。
"2018-10-11 10:10:22".
SimpleDateFormat简单日期格式化类:
包:java.text.SimpleDateFormat
构造器:public SimpleDateFormat(String pattern): 指定时间的格式创建简单日期格式化对象。
方法:
-- public String format(Date date): 可以把日期对象格式化成我们喜欢的时间形式,返回的是字符串!
-- public String format(Object time): 可以把时间毫秒值格式化成我们喜欢的时间形式,返回的是字符串!
-- public Date parse(String date) throws ParseException: 把字符串的时间解析成日期对象
小结:
简单日期格式化对象SimpleDateFormat不仅可以把日期对象和时间毫秒值格式化成我们喜欢的字符串时间形式
它还可以把字符串的时间解析成日期对象
-- public Date parse(String date) throws ParseException: 把字符串的时间解析成日期对象
*/
public class SimpleDateFormatDemo03 {
public static void main(String[] args) throws ParseException {
// 面试题:请问 “2019-11-04 09:30:30” 往后 1天15小时,30分29s后的时间是多少。
// 1、把字符串时间解析成日期对象(重点)
String dateStr = "2019-11-04 09:30:30";
// 创建一个简单日期格式化对象负责解析
// 注意:简单日期格式化对象解析时间的格式必须与被解析时间的格式完全一致,否则报错。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(dateStr);
// 2、走 1天15小时,30分29s后
long time = d.getTime() + (24L*60 * 60 + 15* 60*60 + 30 * 60 + 29 ) * 1000;
System.out.println(sdf.format(time));
}
}