一、String
StringBuilder可变字符串,线程不太安全,但效率高,推荐使用。
StringBuffer可变字符串,线程安全,但效率低,不推荐使用。
String是不可变字符串,根据实际情况使用。
1.1String类
length() | 返回字符串的长度 | ||
String s1 = new String("abcdef"); s1.length(); //-->>6 | |||
charAt(int index) | 返回对应索引的值 | ||
String s1 = new String("abcdef"); s1.charAt(2); //-->>c | |||
equals(String str) | 判断是否相等 | ||
String s1 = new String("abcdef"); String s2 = new String("a"); String s3 = new String("a"); s1.equals(s2); s2.equalse(s3); //-->>false true | |||
isEmpty() | 判断是否为空 | ||
String s1 = new String("abcdef"); s1.isEmpty(); //-->>false 不为空 | |||
indexOf(int ch) | 存在返回0,不存在返回-1 | ||
String s1 = new String("abcdef"); s1.indexOf('b'); //-->>0 char字符可以自动转换成int 所以传入字符是成立的 | |||
substring(int index) | 返回传入索引之后的字符串 | ||
String s1 = new String("abcdef"); s1.substring(2); //-->>cdef从索引2开始截取 | |||
replace() | 替换指定的字符 | ||
String s1 = new String("abcdef"); s1.replace('e', '*'); //-->>abcd*f | |||
split(String regex) | 根据指定正则表达式拆分字符串 | ||
String s4 = new String"qwer,awds,dd"; String[] strArray = s5.split(","); //-->>strArray 为一个String类型的数组 里面存放的是用“,”分隔的qwer awsd dd三个字符串 | |||
trim() | 返回字符串的副本,忽略前导空白和尾部空白 | ||
String s5 = " bb aa "; String s55 = s5.trim(); System.out.println(s55.length()); //-->>s55中的字符串为”bb aa” 长度为6 | |||
equalsIgnoreCase(String s) | 将此String与另一个String比较,不考虑大小写 | ||
System.out.println("Abc".equalsIgnoreCase("abc")); //-->>true | |||
lastIndexOf(String s) | 返回指定子字符串在此字符串中最右边出现处的索引 | ||
System.out.println("Abcbd".lastIndexOf('b')); //-->>3 | |||
startWith(String s) | 测试此字符串是否以指定的前缀开始。 | ||
System.out.println("Abcbd".startsWith("Ab")); //-->>true | |||
endsWith(String s) | 测试此字符串是否以指定的后缀结束。 | ||
System.out.println("Abcbd".endsWith("bd")); //-->>true | |||
toLowerCase() | 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 | ||
System.out.println("Abcbd".toLowerCase()); //-->>abcbd | |||
toUpperCase() | 将此 String 中的所有字符都转换为大写。 | ||
System.out.println("Abcbd".toUpperCase()); //-->>ABCBD |
1.2 StringBuilder与StringBuffer
StringBuilder与StringBuffer的区别,StringBuilder与String的区别:StringBuilder效率高,线程不安全,StringBuffer效率低,线程安全。String是不可变字符串,StringBuilder是可变字符串。如果是简单的声明一个字符串没有后续过多的操作,使用String,StringBuilder均可,若后续对字符串做频繁的添加,删除操作,或者是在循环当中动态的改变字符串的长度应该用StringBuilder,使用String会残生多余的字符串,占用内存空间。
String的源代码中核心数组private final char value[];为private封装之后,不让我们去做改变,StringBuilder中如果是public那么我们就可以随意操作,但是default,只有同包可以操作。StringBuilder能动态的扩容。
public class StringBuilderTest {
public static void main(String[] args) {
System.out.println("**StringBuilder*********************");
//字符数组长度初识为16
StringBuilder sb = new StringBuilder();
//字符数组长度初识为32
StringBuilder sb1 = new StringBuilder(32);
//字符数组长度初始为32,value[]={'a','b','c'}
StringBuilder sb2 = new StringBuilder("abc");
//往sb2里面追加字符串 true也被认定为字符串往里追加
sb2.append("def");
//append返回的是 this 所以可以一直.append() 通过return this行程方法链
sb2.append(true).append(321).append("随便");
//虽然StringBuilder的长度为32 。expandCapacity(int minmumCapacity)这个方法便是源代码中的自动扩容方法。但是数组的大小是固定的不能改变的 所以在这个方法中实现的也是数组的copy返回的是一个新的大小的数组
StringBuilder gh = new StringBuilder("a");
for(int i = 0 ; i < 1000; i++){
gh.append(i);
}
System.out.println(sb2);
//删除 包头不包尾 从1索引删到第3个索引
//同样也是一个方法链 删除13后返回的是一个新的String任然有13
sb2.delete(1, 3).delete(1, 3);
System.out.println(sb2);
//在第二个索引插入 "哈哈"
sb2.insert(2, "哈哈");
System.out.println(sb2);
//翻转
sb2.reverse();
System.out.println(sb2);
System.out.println("**StringBuffer**********************");
//与StringBuilder的方法相同 唯一不同变是 StringBuffer是线程安全的
}
}
二、Date
2.1常用方法
public class Test {
public static void main(String[] args) {
Date d=new Date();
System.out.println(d);
//方法加横线: 过期方法 废弃方法 不建议你用
System.out.println(d.toGMTString());
System.out.println(d.toLocaleString());
System.out.println(d.getYear());//118+1900 2018-1900=118
System.out.println(d.getMonth());//7:返回的值在 0 和 11 之间,值 0 表示 1 月。
System.out.println(d.getDate());//14
System.out.println(d.getDay());//2 :(0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday)
System.out.println(d.getTime());//1534234967633
System.out.println(System.currentTimeMillis()); //推荐:
// public static native long currentTimeMillis();
//java.sql.Date
/*
* util.Date 和sql.Date 区别联系:
* 区别:util.Date 年月日 时分秒
* sql.Date 年月日
* 联系:sql. Date extends java.util.Date
*/
java.sql.Date date=new java.sql.Date(1534234967633L);
System.out.println(date);//2018-08-14
Date dd=java.sql.Date.valueOf("2018-5-8");//String--->Date
//util.Date 和sql.Date相互转化:
//util.Date---》sql.Date
java.sql.Date d2=new java.sql.Date(new Date().getTime());
//sql.Date---》util.Date
Date d3=d2;
}
}
2.2格式化
public class Test {
public static void main(String[] args) throws ParseException {
//String--->Date:缺点格式固定只能是:xxxx-xx-xx形式:
// java.util.Date d=java.sql.Date.valueOf("1997/3/6");
// System.out.println(d);
//给定格式:
DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
//String--->Date
java.util.Date date=df.parse("1990年4月17日 12:26:29");
System.out.println(date);//Tue Apr 17 00:26:29 CDT 1990
//Date---->String
java.util.Date d2=new java.util.Date();
System.out.println(d2);
System.out.println(d2.toGMTString());
System.out.println(d2.toLocaleString());
System.out.println(df.format(d2));
}
}
2.3Calendar
public class Test {
public static void main(String[] args) {
// Calendar cal=new Calendar();
// Calendar cal=new GregorianCalendar();
Calendar cal=Calendar.getInstance();
System.out.println(cal);
//获取属性:
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH));
System.out.println(cal.get(Calendar.DATE));
System.out.println(cal.get(Calendar.DAY_OF_MONTH));
System.out.println(cal.getActualMaximum(Calendar.DATE));
System.out.println(cal.getActualMinimum(Calendar.DATE));
//设置属性:
cal.set(Calendar.DATE, 28);
cal.set(Calendar.YEAR, 1990);
cal.set(Calendar.MONTH, 3);//四月
System.out.println(cal);
//String-->Date-->Calendar :
java.sql.Date d=java.sql.Date.valueOf("2002-8-19");
cal.setTime(d);
System.out.println(cal);
}
}
2.4日历
public class Demo {
public static void main(String[] args) {
//1.日期录入
System.out.print("请录入一个日期(格式例如:2019-4-7):");
Scanner sc=new Scanner(System.in);
String str=sc.next();
// System.out.println(str);
//2.String--->Calendar
Calendar cal=Calendar.getInstance();
java.sql.Date d=java.sql.Date.valueOf(str);
cal.setTime(d);
// System.out.println(cal);
//3.打印日历的头部:
System.out.println("日\t一\t二\t三\t四\t五\t六\t");
//4.求出本月的最大天数:
int maxDay=cal.getActualMaximum(Calendar.DATE);
//8.算出当前日期:
int nowDay=cal.get(Calendar.DATE);
//10.将当前日期 置为 本月的 第一天:
cal.set(Calendar.DATE, 1);
//11。获取第一天是 一周中的第几天:
int num=cal.get(Calendar.DAY_OF_WEEK);
// System.out.println("num===="+num);
//12.算出前面的空格数:
int kongGe=num-1;
// System.out.println(maxDay);
//5.开始遍历日期:
//6.每7个数 换行操作:
int count=0;
//13.遍历空格:
for(int i=1;i<=kongGe;i++){
System.out.print("\t");
count++;
}
for(int i=1;i<=maxDay;i++){
//7.在当前日期上 打 *
if(i==nowDay){
System.out.print(i+"*\t");
}else{
System.out.print(i+"\t");
}
count++;
if(count%7==0){
System.out.println();
}
}
}
}
三、枚举
public enum Gender {//枚举类
男,女;
}
package com.bjsxt.test08;
public class Person {
private String name;
private int age;
private Gender sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Gender getSex() {
return sex;
}
public void setSex(Gender sex) {
this.sex = sex;
}
public Person() {
super();
}
public Person(String name, int age, Gender sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public static void main(String[] args) {
Person p=new Person();
p.setAge(19);
p.setName("lili");
p.setSex(Gender.男);
System.out.println(p);
Person p2=new Person("nana", 21, Gender.女);
System.out.println(p2);
}
}
四、Math
import static java.lang.Math.*;//静态导入
public class Test {
public static void main(String[] args) {
//随机数:
System.out.println(Math.random());//[0.0,1.0)
//开平方
System.out.println(Math.sqrt(4));
//绝对值
System.out.println(Math.abs(-9));
//向上取值
System.out.println(Math.ceil(90.00001));//91.0
System.out.println(Math.ceil(-90.99999));//-90.0
//向下取值
System.out.println(Math.floor(90.999999));//90.0
System.out.println(Math.floor(-90.0000001));//-91.0
//四舍五入
System.out.println(Math.round(3.14));//3
System.out.println(Math.round(3.84));//4
//次幂
System.out.println(Math.pow(9.0, 2));//81.0
System.out.println(Math.pow(3.0, 3));//27.0
//比较两个数的哪个大
System.out.println(max(3.8, 8.9));//8.9
//比较两个数的哪个小
System.out.println(min(3.8, 8.9));//3.8
}
}
五、Random
import java.util.Random;
public class Test02 {
public static void main(String[] args) {
/*
//随机数:
Random rd=new Random(System.currentTimeMillis());
//产生10个随机数:
for (int i = 1; i <=10; i++) {
System.out.println(rd.nextInt());
}
*/
Random rd=new Random();
for (int i = 1; i <=10; i++) {
//System.out.println(rd.nextInt(10));//[0,10)
//System.out.println(rd.nextBoolean());
System.out.println(rd.nextDouble());//[0.0,1.0)
}
Math.random();//[0.0,1.0)
}
}