字符串
字符串的定义 String 引用类型 默认返回值为null
字符串的构造方法 String sc=””; String sc = new String(“”);(引号之间的就是字符串的值)
声明字符串
String str = "hr";
str=new String("hello");
str =new String();
char[] arr = {'a','b',97};
str = new String(arr);//aba
System.out.println(str);
str = String.valueOf(99);
System.out.println(str);
字符串的拼接使用加号(+),加号的优先级和在基本数据类型运算中优先级一样,字符串与其他类型进行拼接得到的结果类型是字符串。
字符串与对象进行拼接得到的是字符串与对象toString的结果进行拼接
str = "123"+23; //12323
System.out.println(str);
str = "123"+"ab"; //123ab
System.out.println(str);
str = "123"+new Object(); //"123"+这个对象的toString的结果
//123java.lang.Object@1b6d3586
System.out.println(str);
str = "123"+new int[]{1,3,5,3};//123[I@4554617c
System.out.println(str);
System.out.println(123+123+"123");//246123
System.out.println(123+"123"+123);//123123123
字符串中的一些方法:
equals方法:通过equals对字符串进行比较,在String中,equals方法重写,比较的是字符串是否
相同
boolean bool="123".equals("123");
String c = new String("11111");
String b = new String("11111");
bool = c.equals(b);
System.out.println(bool);//true
indexOf方法:查找子串在字符串中的位置,返回首次出现的下标。若找不到,则返回-1。
int index = "123456".indexOf("34");
System.out.println(index);//2
index ="123556".indexOf("22");//-1
System.out.println(index);
index="111111341".indexOf("1");
System.out.println(index);//0
charAt:获取指定下标位置的字符
char item = "123456".charAt(4);
System.out.println(item);//5
trim:去除前后空白符(\t,\n,\r),但是不能去除中间的的空白位
str="\n\r\ta\t".trim();
System.out.println(str);//a
str = "\n\r \t 12 3 \n\r";
System.out.println(str);// 12 3
toUpperCase 将字符串中的小写字母转为大写 toLowerCase 将字符串中的大写字母转为小写
str = "123abc".toUpperCase();//转大写
System.out.println(str);//123ABC
str = "1123ABCadR".toLowerCase();//转小写
System.out.println(str);//1123abcadr
Substring 从字符串中截取一部分字符串,括号里的参数为开始(开始和结束)位置的下标,下标表示方法和数组一样从0开始。
str="567466".substring(2);//从下标为2截到最后
System.out.println(str);//7466
str="567466".substring(2,5);//从下标为2到下标为5之前不包括下标为5
System.out.println(str);//746
replace 方法替换
str="1234568543".replace("34","AAA");//将字符串中所有的“34“替换为“AAA”
System.out.println(str);
str="12345.68543".replaceAll(".","AAA");//
System.out.println(str);
split 方法分割字符串,从参数字符所在的位置进行分割,如果参数在首位,则会在左侧分出一个“,”。
String[] strArr="1233241424".split("2");//[1, 33, 414, 4]
System.out.println(Arrays.toString(strArr));
strArr="1233241424".split("1");//[, 23324, 424]
System.out.println(Arrays.toString(strArr));
strArr="1233241424".split("4");//[12332, 1, 2]
System.out.println(Arrays.toString(strArr));
length 方法获取字符串长度
int l = "1234".length();
for (int i=0;i<str.length();i++){}
isEmpty 是否为空串,传入字符串参数,如果是空串返回true,不是空串则返回flase
"123".isEmpty();//是空串返回true,不是空串则返回flase
if (!str.isEmpty()){
//非空则执行
}
startWith/endWith 方法是否以...开始/结束
"13456".startsWith("13"); //true
"13456".endsWith("6"); //true
valuesOf将传入的参数转为字符串
String.valueOf("1");//转化为字符串类型
String.valueOf(new Object());
// String.valueOf(null);
对于重载的两个test方法,Java 编译器在选择重载方法时会优先选择能够提供最具体匹配的方法。在这里,null 可以被视为 String 类型的 null,因为 String 是 Object 的子类。因此,null 更匹配于 String 类型的参数。
public class Main {
public static void main(String[] args) {
test(null);
}
public static void test(String str){}
public static void test(Object obj){}
}
字符串常量池
程序中第一次使用量的形式定义“123”,会将字符串对象传入字符串常量池之后 如果再次使用量的形式使用该对象,就执行使用常量池的对象
String strA = "123";
String strB = "123";
//同为常量池中的对象
System.out.println(strA==strB);//true
如果是通过new构造出来的,则是一个新的对象
String str1= new String("123");
String str2= new String("123");
//new 得到的为新的
System.out.println(str1==str2);//flase
System.out.println(str1==strA);//flase
字符串比较中==的使用
String b = "12"+"3";
String c = "1"+"2"+"3";
String item = "12";
String d = item+"3";
String dd =item+"3";
System.out.println(d == dd);//false
String e = "12"+3;
final String aa = "12";
String f = "aa"+3;
System.out.println(strA==b);//true
System.out.println(strA==c);//true
System.out.println(c==b);//true
System.out.println(strA==d);//false item为变量
System.out.println(strA==e);//true
System.out.println(strA==f);//true
String bb = new String("12");
String h = "bb"+3;
System.out.println(strA==h);//flase bb为一个运行出来的结果,无法确定它的结果
intern
返回 str对象在字符串常量池中的副本对象,如果已有副本直接返回副本
过程 检查str是否存在字符串常量中存在副本,如果不存在就复制一份放入常量池,然后返回常量池中的副本对象
所以两个字符串 equals 为true那么 两个字符串的intern方法 ==
str.intern();
str1= new String("123456");
str2= new String("123456");
System.out.println(str1.equals(str2));//true
System.out.println(str1==str2);//false
System.out.println(str1.intern()==str2.intern());//true
new String("abc");//创建了一个或两个对象
new String("abc");//创建了一个或两个对象
当字符串常量池中已经存在 "abc" 时,创建一个对象在堆内存中。
当字符串常量池中不存在 "abc" 时,创建一个对象在堆内存中,并在字符串常量池中创建另一个对象。
StringBuffer/StringBuilder 作为容器 避免字符串在拼接过程中产生中间件
调用append 往StringBuilder数组中追加字符
StringBuilder strB=new StringBuilder();
strB.append("123");
strB.append("abc");
strB.append("456");
其中前者StringBuffer是线程安全的,后者StringBuilder是线程不安全的
容量的扩容: 默认容量是16 可以传入参数设定初始容量
一次扩容后容量=原容量*2+2
System.arrayCopy();()内有五个参数
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
src: 源数组对象,即要复制数据的数组。Object 类型
srcPos: 源数组中的起始位置,从该位置开始复制数据。整数类型
dest: 目标数组对象,即将数据复制到的数组。Object 类型
destPos: 目标数组中的起始位置,从该位置开始将数据复制过去。整数类型
length: 要复制的数组元素数量。整数类型
Date
时间是Date类型,long
与时间有关的方法
getTime:获取当前时间
Date date=new Date();
System.out.println(date);
long time = date.getTime();
System.out.println(time);
SimpleDateFormat:标准化时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(sdf);
String sdfStr=sdf.format(date);
System.out.println(sdfStr);
随机数
随机数方法Math.random
double ran = Math.random();//[0,1)之间的随机数
double ran1 = ran*82+8;//[8,90)之间的随机数
随机数类
Random ran=new Random();()内传入随机数种子
Random randomObj=new Random(12);
Random randomObj1=new Random(12);
int aa=randomObj1.nextInt();
int bb=randomObj.nextInt();
aa=randomObj.nextInt(12);
bb=randomObj.nextInt(12);
小数取整的三种方法:
//四舍五入 round方法
long a = Math.round(ran1);
System.out.println(a);
Math.round(12.33f);//float返回int类型,double返回long类型
//向上取整 ceil方法
double ceilnum=Math.ceil(ran1);
System.out.println(ceilnum);
//向下取整 floor方法
double floornum=Math.floor(ran1);
System.out.println(floornum);