String类的使用
public class demo1 {
public static void main(String[] args) {
String name="张三";//张三是常量存储在常量池中
name="李四";//李四赋值给name变量,并没有修改数据而是重新开辟一个空间
String name2="李四";//这样的话 name和name2指向的是同一个数据 他们在栈区的地址就是一样的了 实现了内存共享
//因为当给name2赋值的时候 它会先去常量池中找有没有李四这个数据 有就会共享它的内存
System.out.println("============");
//字符串的另外一种创建方式 new string()
//其实这个会创建两个java数据 在常量池有一个 在堆区也会有一个,但是在程序执行的时候堆区的会指向常量池中的
String str=new String("java");
String str1=new String("java");
System.out.println(str==str1);//false 虽然他们指向的数据是一样的 但是他们的内存地址是不一样的
System.out.println(str.equals(str1));//true 使用equals方法时,它们比较的是内容而不是地址
---------------------------------------------------------------------------------
/*字符串使用说明:
* length();返回字符串的长度
* charAt(int index);返回某个位置的字符
* contains(String str);判断是否包含某个子字符串
* toCharArray();返回字符串对应的数组
* indexOf();返回字符串首次出现的位置
* lastIndexOf();返回字符串最后异常出现的位置
* trim();去掉字符串前后空格
* toUpperCase();把小写转成大写 toLowerCase()大写转换为小写
* endWith(str);判断是否以str结尾,startWith(str);判断是否以str开头
* replace(char old,char new);用新的字符串或者字符替换旧的字符或字符
* split();对字符串进行拆分
* equals();比较字符串内容是否相等
* compareTo()比较大小*/
String content="java是最好的语言";
System.out.println(content.length());//10
System.out.println(content.charAt(1));//a
System.out.println(content.contains("java"));//true
System.out.println(content.contains("pho"));//false
System.out.println(Arrays.toString(content.toCharArray()));//打印为数组的模式
String c1="java好写好学java真好玩java真牛逼";
System.out.println(c1.indexOf("java"));//0
System.out.println(c1.indexOf("java",4));// 8 从第4个位置开始找
System.out.println(c1.lastIndexOf("java"));//15
System.out.println(c2.trim());//hello World
System.out.println(c2.toUpperCase());// HELLO WORLD
System.out.println(c2.toLowerCase());// hello world
String c3="hello.java";
System.out.println(c3.endsWith(".java"));//true
System.out.println(c3.startsWith("hello"));//true
String c4="java 用一门语言,改变一个世界!java 冲";
System.out.println(c4.replace("java","python"));//python 用一门语言,改变一个世界!python 冲
String []arr=c4.split(" ");//按空格进行拆分
String []arr1=c4.split("[ ,]");//按空格和逗号拆分 小技巧:[ ,]+ 当字符串同时出现多个时使用+ 可以忽略掉多个空格
//遍历数组
for (String s : arr) {
System.out.println(s);
}
for (String s1 : arr1) {
System.out.println(s1);
}
System.out.println("------------------");
String c5="hello";
String c6="HELLO";
System.out.println(c5.equals(c6));//false
System.out.println(c5.equalsIgnoreCase(c6));//true equalsIgnoreCase忽略大小写进行比较
String c7="abc";
String c8="xyz";
System.out.println(c7.compareTo(c8));//-23 比较第一个字母的ascii码作差,第一个相同就比较第二个 以此类推
String c9="abcdefg";
System.out.println(c7.compareTo(c9));// -4 当这种情况下 就会用字符串个数做差比较 因为c7前面的数全和c9相同
}
}
string类小案例
public class demo2 {
public static void main(String[] args) {
String str="this is a text";
//将str中的单词获取出来
String []arr=str.split(" ");
for (String s : arr) {
System.out.println(s);
}
//将str中text替换成practice
String str2=str.replace("text","practice");
System.out.println(str2);
//在text前面插入一个easy
String str3=str.replace("text","easy practice");
System.out.println(str3);
//将每个单词的首字母改为大写
for (int i = 0; i < arr.length; i++) {
char first=arr[i].charAt(0);
//把第一个字符转成大写
char upperfirts=Character.toUpperCase(first);//Character是char对应的包装类
//合并
String news=upperfirts+arr[i].substring(1);//substring(1)是从下标为1的字符串开始截取
System.out.print(news+" ");
}
}
}
StringBuffer:可变长字符串,jdk1.0提供,运行效率慢,线程安全
StringBuilder:可变长字符串,jdk1.5提供,运行效率快,线程不安全
public class demo3 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
//1.append()追加
sb.append("java");
System.out.println(sb.toString());
sb.append("真的牛逼");
System.out.println(sb.toString());
//2.insert();添加
sb.insert(0,"我在最前面!");//表示从第0个位置开始添加
System.out.println(sb.toString());
//3.replace();替换 指定位置
sb.replace(0,3,"hello");//指的是把0-3的位置的内容替换掉 可以增加多个内容
System.out.println(sb.toString());
//4.delete;
sb.delete(0,3);
System.out.println(sb.toString());
}
}
验证stringBuffer和stringBuilder效率
public class demo4 {
public static void main(String[] args) {
long start=System.currentTimeMillis();
/* String string="";
for (int i = 0; i < 999999; i++) {
string+=i;
}*///很多秒
StringBuffer sb=new StringBuffer();
for (int j = 0; j <999999; j++) {
sb.append(j);
}//74
/*StringBuilder sb1=new StringBuilder();
for (int k = 0; k < 999999; k++) {
sb1.append(k);
}*///40
long end=System.currentTimeMillis();
System.out.println("用时:"+(end-start));
}
}
BigDecimal的使用
package oop.demo17;
import java.math.BigDecimal;
public class demo5 {
public static void main(String[] args) {
double d1=1.0;
double d2=0.9;
System.out.println(d1-d2);//0.9999999999999999999999999998
//面试题
double result=(1.4-0.5)/0.9;
System.out.println(result);//0.99999999999999999999999
//因为这使用的是double类型计算 对于这种双精度类型来说
// 计算这种问题的时候可能在它定义变量的时候就已经丢失了一丢丢的精度
//所以计算的时候也自然会丢失一丢丢的精度
//解决如下 :使用BigDecimal来计算高精度运算
BigDecimal s1=new BigDecimal("1.0");
BigDecimal s2=new BigDecimal("0.9");
BigDecimal r1=s1.subtract(s2);//subtract 减法
System.out.println(r1);
BigDecimal r2=s1.add(s2);//add 加法
System.out.println(r2);
BigDecimal r3=s1.multiply(s2);//乘法
System.out.println(r3);
//BigDecimal r4=s1.divide(s2);
//System.out.println(r4);//除法
// 出现异常Non-terminating decimal expansion; no exact representable decimal result.
BigDecimal r4=s1.divide(s2,2,BigDecimal.ROUND_HALF_UP);//结果保留两位小数
System.out.println(r4);//ROUND_HALF_UP 四舍五入
BigDecimal r5=new BigDecimal("1.4").subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9"));
System.out.println(r5);//1 表示(1.4-0.5)/0.9
}
}
Date类的使用
import java.util.Date;
public class demo6 {
public static void main(String[] args) {
//创建date对象 今天
Date date1=new Date();
System.out.println(date1.toString());//打印当前时间
System.out.println(date1.toLocaleString());//过时的方法
Date date2=new Date(date1.getTime()-(60*60*24*1000));
System.out.println(date2.toLocaleString());//打印昨天的时间
//方法after before 判断两个时间的顺序
boolean b1=date1.after(date2);
System.out.println(b1);//true
//compareTo 比较两个时间的大小
int i=date1.compareTo(date2);
System.out.println(i);//1
//equals 比较两个时间是否相等
boolean j=date1.equals(date2);
System.out.println(j);//false
}
}
Calendar 提供了获取或设置各种日历字段的方法
构造方法 :protected Calendar():由于修饰符是protected,所以不能直接创建对象。
import java.util.Calendar;
public class demo7 {
public static void main(String[] args) {
//1.创建Calender对象
Calendar calendar=Calendar.getInstance();
System.out.println(calendar.getTime().toLocaleString());//过时的时间 2022-3-14 16:34:29
System.out.println(calendar.getTime().toString());//Mon Mar 14 16:34:29 CST 2022
//2.获取时间信息
int year=calendar.get(Calendar.YEAR);
int month=calendar.get(Calendar.MONTH);
int day=calendar.get(Calendar.DAY_OF_MONTH);
int hour=calendar.get(Calendar.HOUR_OF_DAY);//HOUR 12小时HOUR_OF_DAY24小时
int minute=calendar.get(Calendar.MINUTE);
int second=calendar.get(Calendar.SECOND);
System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+":"+minute+":"+second);//月份0-11 所以month+1
//3.修改时间
Calendar calendar1=Calendar.getInstance();
System.out.println(calendar1.getTime().toLocaleString());
calendar1.set(Calendar.DAY_OF_MONTH,4);//把日期改成4号
System.out.println(calendar1.getTime().toLocaleString());
//4.add方法修改时间
calendar1.add(Calendar.HOUR_OF_DAY,1);
System.out.println(calendar1.getTime().toLocaleString());
//5.获取一个月最多最少多少天
int max=calendar1.getActualMaximum(Calendar.DAY_OF_MONTH);
int min=calendar1.getActualMinimum(Calendar.DAY_OF_MONTH);
System.out.println(max);
System.out.println(min);
}
}
SimpleDateFormat使用
package oop.demo17;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class demo8 {
public static void main(String[] args) throws ParseException {
//1.创建SimpleDateFormat对象
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");//自定义
//创建Date
Date date=new Date();
//格式化时间(把日期转换成字符串)
String str=sdf.format(date);//2022年03月14日17:16:08
System.out.println(str);
//解析(把字符串转成日期)
Date date1=sdf.parse("2001年12月11日13:14:52");
System.out.println(date1);//Tue Dec 11 13:14:52 CST 2001
}
}
system类的使用
package oop.demo17;
public class demo9 {
public static void main(String[] args) {
//arraycopy:数组的复制
//src:源数组
//srcPos:从哪个位置开始复制
//dest:目标数组
//destPos:目标数组的位置
//length:复制的长度
int []arr={12,32,43,23,15,31};
int []arr1=new int [6];
System.arraycopy(arr,0,arr1,0,arr.length);
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
//计时器
long star=System.currentTimeMillis();
for (int i = 0; i < 99999; i++) {
for (int j = 0; j < 999999; j++) {
int result=i+j;
}
}
long end=System.currentTimeMillis();
System.out.println((end-star));
//System.gc();告诉垃圾回收
}
}