1.String类
String类是一个引用类型,默认值为null;
字符串在声明之后是一个常量,不能改变,是一个private final修饰的value,只能在类的内部访问,而且类的内部没有提供任何修改的方法,所以是一个常量
1.声明字符串:
String stri="abc你好";
stri =new String();
stri =new String("你好");
System.out.println(stri);
2.字符串拼接:
1. +
字符串拼接可以使用+
String str="12"+"35";//1235
str="65"+23;//6523
str="123"+new Object();//"123"+这个对象的toString方法的结果
System.out.println(str);//123java.lang.Object@b4c966a
str="123"+new int[]{1,24,5,9};
System.out.println(str);//123[I@1d81eb93
System.out.println("-----------------");
System.out.println("123"+123+123);// 123123123
//在上面的输出语中,执行的顺序决定了结果,上面的是有了字符串,和123这个数相加之和得到123123这个字符串,再何123这个数相加,得到123123123
System.out.println(123+123+"123");// 246123
上面的输出语句中,是先由两个123的数值相加得到246,在和123这个字符串相加得到246123这个字符串
3.字符串比较 equals
比较两个字符串是否相同只比较字符是否相同,不比较地址
String str="123123";
str=new String;
System.out.println("str.equals"123123"");//true
4.split() 分割
splite是以参数来分割,每有一个这个数值就会分割一次,如果前面第一个就是这个数值,那么会在前面空出来一个,但是在最后面不会空出来
String str="123123";
System.out.println(str.split(2));//1,31,3
String str="1231231";
System.out.println(str.split(1));//[ ,23,23]
5.valueof()
将传入的参数转换成字符串,下面的98现在是字符串类型的98,现在用这个98+97得到的是字符串类型9897
String str=String.valueof('98');//98
System.out.println(str+97);//9897
6.trim()
去除字符串前后的空格和转义符,之去除字符串前后的,但是中间的不会去除
String str2="\n\r \t 1 23 3 \n \r".trim();
System.out.println(str2);// 得到:1 23 3
7.startWith()/endWith()
判断一个字符串是否已某个字符串开始或者结束
str="12312313";
System.out.println(str.endsWith("13")+"-----"); //true
System.out.println(str.startsWith("12")+"-----"); //true
8.index()/lastIndexOf()
输出字符串中第一次出现某个字符串出现的位置
int index="123456".indexOf("34");
int index1="123456".indexOf("3457");
System.out.println(index1);//-1 找不到对应的字符串的情况下,输出-1
System.out.println(index);//2 因为字符串下标也是从零开始,3在字符串中的位置是2,所以会输出一个2
index1="123123132".lastIndexOf("1"); 这个是从后向前找字符串1第一次出现的位置,输出这个字符串在整个字符串中的位置
System.out.println(index1);//6
9.charAt()
输出在字符串某个位置的字符
char item="123456".charAt(4);
System.out.println(item);//5
10.replace()/replaceAll()
replace:将字符串中的某些字符串替换成另一个字符串
replaceAll:正则表达式,在下面代码中,虽然有".",但是这个.是任意字符的意思,所以结果是AAAAAAAA
strin="1234534".replace("34","AAA");//12AAA56AAA
System.out.println(strin);
strin="12.31.23".replaceAll(".","A");//AAAAAAAA
11.toUppercase()/tolowercase()
将字符串中的字母变成大写/小写
str="123abc".toUpperCase();//转成大写
System.out.println(str); 123ABC
str="123ABXXCabc".toLowerCase();//转成小写
System.out.println(str); 123abxxcabc
12.isEmpty()
判断字符串是否为空,下面代码输出为false
boolean b1="123".isEmpty();
System.out.println(b1);
13.subString()
获取某个范围内的字符串
注意!!!!这个范围是前面的数值的位置能取到,后边的取不到,所以如果要取到最后一位,下面的范围应该是(1,6)这样可以取到“23456”这个字符串
String strin="123456".substring(1,3);
System.out.println(strin);//23
14.length()
获取字符串的长度
通过这个length方法获取长度,可以在以后循环遍历的时候使用
int l="123123".length();
System.out.println(l);//6
15. 常量池
String str5="abc";
//现在已经定义了一个str5的字符串,所以“abc”这个字符串在常量池中已经存在
//在下次要用abc这个字符串的时候直接从常量池中用,不需要再生成一遍
String str6="abc";
System.out.println(str5==str6);//得到true
是因为这两个字符串在常量池中的地址相同
面试题:
//1.
String strA="123";
String strB="123"
String strC=new String("123");
String strD=new String("123");
System.out.println(strC==strD);//false
System.out.println(strA==strC);//false
//2.
String strE="12"+"3";//在编译成字节码文件的时候就解析成了123
String strF= "1"+"2"+"3";
String item="12";
String strG=item+"3";//会生成一个新的对象
String strGG=item+3;
System.out.println((strG==strGG)+"-----------");
String strH="12"+3;
System.out.println(strA==strE);//true
System.out.println(strA==strF);//true
System.out.println(strE==strF);//true
System.out.println(strA==strG);//false
System.out.println(strA==strH);//true
System.out.println(strC==strG);//false
final String aa="12";
String strI=aa+"3";
System.out.println(strA==strI);//true
String bb=new String("12");
String strJ=bb+"3";
System.out.println(strJ==strA);//false
在上面代码中要特别注意有变量参与的时候,只有在运行之后才会得到结果,所以不会和常量池匹配,所以strA==strG是false还有bb是new出来的一个对象,不和常量池中的字符串匹配
在常量池有常量编译优化,这个会在编译时自动识别出来结果,在常量池中有123这个字符串,直接从常量池中拿出123这个字符串使用
16.intern()
intern()流程:检查str5在常量中是否存在副本,如果不存在,就复制一份放到常量池中,然后返回常量池中的副本对象,如果有直接返回副本到对象 ,直接返回副本对象,下面的代码使用intern()方法之后strA和strB中的123123字符串在常量池当中会是同一个所以最后一个才是正确
返回 str5对象在字符串常量池中的副本对象
//所以 两个字符串 equals 为true
//name 两个字符串inter方法==
strA=new String("123123");
strB=new String("123123");
System.out.println(strA.equals(strB));//true
System.out.println(strA==strB);//false
System.out.println(strA.intern()==strB.intern());//true
小面试题:
new String("abc") 问创建了几个对象(一个或者两个)
如果在常量池当中没有abc这个字符串,那么将会创建一个副本对象放在常量池,这个时候本身new出来的也创建一个对象,那么就是创建两个对象
如果在常量池当中已经有abc这个字符串,那么只需要创建一个对象就可以了
17. StringBUffer/StringBuilder
如果要执行下面代码
String str="";
for(int i=0;i<10;i++){
str=str+i;
}
会出现0 01 012 0123 01234 012345 0123456..... 这些个字符串,出现很多的字符串会占用更大的空间,为了节省空间所以有了这两个类,StringBuffer是线程安全的,StringBuilder是线程不安全的
StringBuilder strB=new StringBuilder();
strB.append("123");
strB.append("abc");
strB.append("456");
//调用append的时候,往StringBuilder数组中追加字符
//其中没有产生字符串对象
这个是在数组中直接添加字符串,最后一起输出
2.容量
在StringBuilder中默认的容量是16,如果容量不够会自动扩容,原本容量*2+2(源代码是将原容量向左移位+2),当然,也可以自己指定容量
2.随机数
真随机数:Math.Random,这个是真随机数,[0,1)
如果要生成一个2-90的随机数需要Math.Random*88+2
假随机数:直接使用Random类创建对象,就算创建两个新的对象,只要随机种子相同,那么产生的随机数就相同,而且往后执行任意次,两个数都相等
double de=d*82+8;//[8,92)
Random random=new Random(12);//这是一个假随机
Random random1=new Random(12);
int a=random1.nextInt();
int b=random.nextInt();
System.out.println(a+"-----="+b);
a=random1.nextInt(98); //bound是设置范围(nextInt的参数名称)
b=random.nextInt(98);
System.out.println(a+"-----="+b);
3.取整
!!!!注意:-0.5四舍五入是0,-0.4四舍五入是0,-0.6四舍五入是-1
1.四舍五入:
long num=Math.round(de);
System.out.println(num);//13
int numn= Math.round(12.33f);//round()方法返回的是一个int值
System.out.println(numn);
2.向上取整:
double ceilnum=Math.ceil(de);
System.out.println(ceilnum);//13.0
3.向下取整:
double floornum=Math.floor(de);
System.out.println(floornum);//12.0
4.时间类
Date类
在想要得到月份,小时的时候下标都是从0开始
Date date=new Date();
System.out.println(date);
long l=date.getTime();
System.out.println(l);
l=l+2*24*60*60*1000;//向后两天整
date=new Date(l);
System.out.println(date);
date.getMonth();//0-11 七月返回6
时间格式化:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss SSS");//HH是24小时制
String sdfStr=sdf.format(date);
System.out.println(sdfStr);//这里得到的是规定的格式的时间
LocalDateTime dateTime=LocalDateTime.now();//本地时间
System.out.println(dateTime);
ZonedDateTime zdt=ZonedDateTime.now();
Object obj= zdt.getZone();//在计算机里面记录的是上海时区
标签:JAVA,String,基础,System,字符串,str,println,第五天,out
From: https://blog.csdn.net/m0_73570063/article/details/140520676