6.1Sting类和StringBuffer类
6.1.1 String类的初始化
// 创建一个空的字符串
String str1 = new String();
// 创建一个内容为abc的字符串
String str2 = new String("abc");
// 创建一个内容为字符数组的字符串
char[] charArray = new char[] { 'A', 'B', 'C' };
String str3 = new String(charArray);
char[] chars = new char[]{'1','被','子'};
String str4 = new String(chars);
// 输出结果
System.out.println("a" + str1 + "b");
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
//运行结果
ab
abc
ABC
1被子
String常量池,地址允许改动,如果内容一致,不会产生新地址.
6.1.2 String类的常见操作
1.字符串的基本操作
String s = "abcabcbacdba"; // 初始化字符串
System.out.println("字符串的长度为:" + s.length());
System.out.println("字符串中第一个字符:" + s.charAt(0));
System.out.println("字符c第一次出现的位置:" + s.indexOf('c'));
System.out.println("字符c最后一次出现的位置:" + s.lastIndexOf('c'));
System.out.println("子字符串第一次出现的位置:" + s.indexOf("ab"));
System.out.println("子字符串最后一次出现的位置:"
+ s.lastIndexOf("ab"));
//运行结果
字符串的长度为:12
字符串中第一个字符:a
字符c第一次出现的位置:2
字符c最后一次出现的位置:8
子字符串第一次出现的位置:0
子字符串最后一次出现的位置:3
2.字符串的转换操作
String str = "java";
char[] charArray = str.toCharArray(); // 字符串转换为字符数组
System.out.print("将字符串转为字符数组后的遍历结果:");
for (int i = 0; i < charArray.length; i++) {
if (i != charArray.length - 1) {
// 如果不是数组的最后一个元素,在元素后面加逗号
System.out.print(charArray[i] + ",");
} else {
// 数组的最后一个元素后面不加逗号
System.out.println(charArray[i]);
}
}
System.out.println("将int值转换为String类型之后的结果:"
+ String.valueOf(12));
System.out.println("将字符串转换成大写之后的结果:"
+ str.toUpperCase());
//运行结果
将字符串转为字符数组后的遍历结果:j,a,v,a
将int值转换为String类型之后的结果:12
将字符串转换成大写之后的结果:JAVA
3.字符串的替换和去除空格操作
String类的trim()和replace()方法
String s = " http :// localhost : 8080 ";
// 字符串去除空格操作
System.out.println("去除字符串两端空格后的结果:" + s.trim());
// 字符串替换操作
System.out.println("去除字符串中所有空格后的结果:"
+ s.replace(" ", ""));
// 字符串替换操作
System.out.println("去除字符串中所有空格后的结果:"
+ s.replace("t", "T"));
//运行结果
去除字符串两端空格后的结果:http :// localhost : 8080
去除字符串中所有空格后的结果:http://localhost:8080
去除字符串中所有空格后的结果: hTTp :// localhosT : 8080
trim()方法只能去除两端的空格,不能去除中间的空格,若想去除中间的String类的replace()方法.
4.字符串的判断操作
String s1 = "Starter"; // 声明一个字符串]
String s2 = "Starter";
String s3 = new String("ling");
String s4 = new String("ling");
System.out.println("判断是否以字符串St开头:" + s1.startsWith("St"));
System.out.println("判断是否以字符串er结尾:" + s1.endsWith("er"));
System.out.println("判断是否包含字符串ar:" + s1.contains("ar"));
System.out.println("判断字符串是否为空:" + s1.isEmpty());
System.out.println("s1==s1:" + (s1==s2));
System.out.println("s1.equals(s2):" + (s1.equals(s2)));
System.out.println("s1 address:" + System.identityHashCode(s1) +
";
s2 address:" + System.identityHashCode(s2));
System.out.println("s3 address:" + System.identityHashCode(s3) +
";
s4 address:" + System.identityHashCode(s4));
//运行结果
判断是否以字符串St开头:true
判断是否以字符串er结尾:true
判断是否包含字符串ar:true
判断字符串是否为空:false
s1==s1:true
s1.equals(s2):true
s1 address:1163157884;
s2 address:1163157884
s3 address:1956725890;
s4 address:356573597
equals()和==的区别:
Java的八大数据类型:byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。
引用数据类型:类,接口,数组
==
基本类型:对比它们的值是否相等(基本数据类型比较(string 除外), == 和 Equals 两者都是比较值.)
引用类型:对比它们的堆内存地址是否相等
s1==s2,地址相同,旧串比如是A,新串也是A,常量池(字符串缓冲池)中,系统就不会产生新的串地址指向.
equals()
基本类型:对比它们的值是否相等
引用类型:默认情况下,对比它们的字符串中的字符内容是否相等;如果equals()方法被重写,则根据重写过程来比较
equals()方法将父类Object中的equals()方法进行了重写.
C#多一个decimal,java.math.BigDecimal.
BigDecimal bigDecimal1 = new BigDecimal(217328.31);BigDecimal bigDecimal2 = new BigDecimal(217328.31);
//返回true
System.out.println(bigDecimal1.equals(bigDecimal2));
StringBuffer buffer缓存地址,旧串比如是A,一个单独的地址,新串也是A,有一个新地址.
5.字符串的截取和分隔
substring()方法:截取字符串的一部分,索引是从0开始的.
split()方法:将字符串按照某个字符进行分割,例如"-".
String str = "2018-01-24";
// 下面是字符串截取操作
System.out.println("从第6个字符截取到末尾的结果:"
+ str.substring(5));
System.out.println("从第6个字符截取到第7个字符的结果:"
+str.substring(5, 7));
// 下面是字符串分割操作
System.out.print("分割后的字符串数组中的元素依次为:");
// 通过横线连接符“—”将字符串转换为字符串数组
String[] strArray = str.split("-");
// 循环输出数组中的元素
for (int i = 0; i < strArray.length; i++) {
if (i != strArray.length - 1) {
// 如果不是数组的最后一个元素,在元素后面加顿号
System.out.print(strArray[i] + "、");
} else {
// 数组的最后一个元素后面不加顿号
System.out.println(strArray[i]);
}
}
//运行结果
从第6个字符截取到末尾的结果:01-24
从第6个字符截取到第7个字符的结果:01
分割后的字符串数组中的元素依次为:2018、01、24
//字符下标越界 java.lang.StringIndexOutOfBoundsException
String s = "abcde";
System.out.println(s.charAt(10));
6.1.3 StingBuffer类
public static void main(String[] args) {
System.out.println("1、添加------------------------");
add();
System.out.println("2、修改------------------------");
update();
System.out.println("3、删除------------------------");
delete();
}
// 添加
public static void add() {
StringBuffer sb = new StringBuffer(); // 定义一个字符串缓冲区
sb.append("ABC"); // 添加字符串
System.out.println("append添加结果:" + sb);
sb.insert(3, "DE"); // 在指定位置插入字符串
System.out.println("insert添加结果:" + sb);
}
// 修改
public static void update() {
StringBuffer sb = new StringBuffer("ABAAA");
sb.setCharAt(2, 'C'); // 修改指定位置字符
System.out.println("修改指定位置字符结果:" + sb);
sb.replace(3, 5, "DE"); // 替换指定位置字符串或字符 3~4
System.out.println("替换指定位置字符(串)结果:" + sb);
System.out.println("字符串翻转结果:" + sb.reverse());
}
// 删除
public static void delete() {
StringBuffer sb = new StringBuffer("ABCDEFG");
sb.delete(3, 7); // 指定范围删除
System.out.println("删除指定位置结果:" + sb);
sb.deleteCharAt(2); // 指定位置删除
System.out.println("删除指定位置结果:" + sb);
sb.delete(0, sb.length()); // 清空缓冲区
System.out.println("清空缓冲区结果:" + sb);
}
//运行结果
1、添加------------------------
append添加结果:ABC
insert添加结果:ABCDE
2、修改------------------------
修改指定位置字符结果:ABCAA
替换指定位置字符(串)结果:ABCDE
字符串翻转结果:EDCBA
3、删除------------------------
删除指定位置结果:ABC
删除指定位置结果:AB
清空缓冲区结果:
6.2 System类与Runtime类
6.2.1 System类
1.getProperties()方法
// 获取当前系统属性
Properties properties = System.getProperties();
System.out.println(properties);
// 获取所有系统属性的key(属性名),返回Set对象
Set<String> propertyNames = properties.stringPropertyNames();
for (String key : propertyNames ) {
//获取当前键key(属性名)所对应的值(属性值)
String value = System.getProperty(key);
System.out.println(key +"--->"+ value);
}
2.currentTimeMillis()方法
计算程序在进行求和操作时所消耗的时间
long startTime = System.currentTimeMillis();// 循环开始时的当前时间
int sum = 0;
for (int i = 0; i < 100000000; i++) {
sum += i;
}
long endTime = System.currentTimeMillis();// 循环结束后的当前时间
System.out.println("程序运行时间为:"+(endTime - startTime)+ "毫秒");
3.arraycopy()方法
6.2.2 Runtime类
getRuntime():处理器的个数
freeMemory():空闲内存大小
maxMemory():最大可用内存大小
exec():运行记事本
Runtime rt = Runtime.getRuntime(); // 获取Java程序关联的运行时对象
System.out.println("处理器的个数: "
+ rt.availableProcessors() + "个");
System.out.println("空闲内存大小: "
+ rt.freeMemory() / 1024 / 1024 + "M");
System.out.println("最大可用内存大小: "
+ rt.maxMemory() / 1024 / 1024 + "M");
//用exec打开记事本,3秒后关闭
// 创建一个Runtime实例对象
Runtime rt = Runtime.getRuntime();
// 得到表示进程的Process对象
Process process = rt.exec("notepad.exe");
// 程序休眠3秒
Thread.sleep(3000);
// 关闭进程
process.destroy();
6.3 Math类和Random类
两个静态常量PI和E,E的Value: 2.718281828459045.
6.4 包装类
包装类:将基本数据类型的值包装为引用数据类型的对象.
八大基本类型:char,byte,int,short,float,double,long,boolean
装箱:将基本数据类型的值转为引用数据类型.
拆箱:将引用数据类型的值转为基本数据类型.
自动拆装箱
6.5 Date类,Calendar类和DateForm类
6.5.1 Date类
date参数表示1970年1月1日 00:00:00(称为历元)以来的毫秒数,即时间戳.
6.5.2 Calendar类
// 获取表示当前时间的Calendar对象
Calendar calendar = Calendar.getInstance();
// 设置指定日期,将MONTH设为13
//默认lenient模式,月份可以设置为13,加一年
calendar.set(Calendar.MONTH, 13);
System.out.println(calendar.getTime());
// 开启non-lenient模式
calendar.setLenient(false);
calendar.set(Calendar.MONTH, 13);
//这行报错IllegalArgumentException: MONTH
System.out.println(calendar.getTime());
6.5.3 DateForm类
// 创建Date对象
Date date = new Date();
// Full格式的日期格式器对象
DateFormat fullFormat =
DateFormat.getDateInstance(DateFormat.FULL);
// Long格式的日期格式器对象
DateFormat longFormat =
DateFormat.getDateInstance(DateFormat.LONG);
// MEDIUM格式的日期/时间 格式器对象
DateFormat mediumFormat = DateFormat.getDateTimeInstance(
DateFormat.MEDIUM, DateFormat.MEDIUM);
// SHORT格式的日期/时间格式器对象
DateFormat shortFormat = DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.SHORT);
// 下面打印格式化后的日期或者日期/时间
System.out.println("当前日期的完整格式为:"
+ fullFormat.format(date));
System.out.println("当前日期的长格式为:"
+ longFormat.format(date));
System.out.println("当前日期的普通格式为:"
+ mediumFormat.format(date));
System.out.println("当前日期的短格式为:"
+ shortFormat.format(date));
//运行结果
当前日期的完整格式为:2020年9月5日 星期六
当前日期的长格式为:2020年9月5日
当前日期的普通格式为:2020-9-5 22:35:14
当前日期的短格式为:20-9-5 下午10:35
Java 中计算两个时间的相差小时数
//时间处理类
SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date begin = dfs.parse("2004-01-02 11:30:24");
Date end = dfs.parse("2004-01-02 13:31:40");
long between = (end.getTime() - begin.getTime())/1000;
long min = between/60/60;
System.out.println(min);
JAVA 时间差距,两个时间相差多少天,时,分,秒
https://www.cnblogs.com/nongzihong/p/11368058.html