1.string
可以直接使用 String s1 = "hello";
内容不可变 String s2 = new String("world");string类一旦创建内容不变。
(1)比较两个string的内容:
String s = "hello";
s.equals("Hello"); false
s.equalsIgnoreCase("Hello"); true,无视大小写
(2)是否包含子串
String s = "hello";
s.contains("ll");//true 是否包含ll
s.indexOf(“ll”);2,得到索引位置,没有找到返回值为-1
s.startWith("he"); true,开头的是否为he
s.endWith("lo");true,结尾是否是lo
(3)移除收尾空白字符
String s = "\t hello\r\n";
String s2 = s.trim()://"hello" trim()不改变字符串内容,而是改变新的字符串。
(4)提取子串
String s = "hello,world"
s.substring(7);//"world"
s.substring(1,5);//"ello"
不改变字符串,而是获得新的字符
(5)大小写的转换
String s = "heLLo";
s.toUpperCase();//"HELLO"
S.toLowerCase();//"hello"
(6)替换字符
String s = "hello";
s.replace('l','w');//"hewwo" 替换一个字符;
s.replace("l","w~");//替换一段字符
replaceALL(String,String)正则表达式替换子串 没懂的红色标
String[] split(String) 分割字符串
(7)拼接字符串
String[] arr = {"A","B","C"};
String s = String.join("~~",arr);//"A~~B~~C"
(8)把任意数据转换为String:
static String valueOf((int)123);//"123"
static String valueOf((boolean)true);"true"
String.valueOf(new Objiect());//"java.lang.Objiect@35131e422"
把字符串转换为整型 int i = Integer.pareInt("123");//123
Integer I= Integer.valueOf("123"); 转化为一个对象
Integer I2 = Integer.getInteger("123");不是把字符串123变为整型,而是获得环境变量查找有没有123
(9)String转换为char[] : char[] toCharArray()
String s = "hello";
char[] cs = s.toCharArray();{'h','e','l','l','o'}
String s2 = new String(cs);
(10)把String转换为bye[]
String s = "hello";
byte[] bs1 = s.getBytes("UTF-8");不推荐,因为winds编码是gbk,max和linux是utf-8
byte[] bs2 = s.getBytes(StandardCharsets.UF_8);
new String(bs1,"utf-8");
new String(bs2,StandarCharsets.UTF_8);
字符串和byte[]相互转换时要注意编码,建议总是用UTF-8
2.StringBuilder类,拼接,String能用+拼接但是每次循环会创建新的字符串对象,会浪费内存影响GC效率
String s = "";
for (int i = 0;i<1000;i++){
s = s+String.valueOf(i);
}
StringBuilder可以高效拼接字符串,是可变对象,可以预分配缓冲区。
StringBuilder sb = new StringBuilder(1024);
for (int i = 0;i<1000;i++){
sb.append(String.valueOf(i));
}
String s = sb.toString()//把布尔值转换为String
StringBuilder可以进行链式操作。
StringBuilder sb = new StringBuilder(1024);
String s = sb.append("mr ")
.append(name)
.append("!")
.insert(0,"Hello, ")
.toString();
3.包装类型
java的数据类型:
基本类型:int,boolean,float。。
引用类型:所有class类型
如何把基本类型视为对象。
定义一个实例字段int
定义一个Integer类,包含一个实例字段int
public class Integer{
private int value;
public Integer(int value){
this.value = value
}
}
可以把Integer视为int的包装类型
int,Integer,String的相互转换
Integer n1 = new Integer(i);//把int变为integer
Integer n2 = Integer.valueOf(i)//把int或string变为integer
int x1 = n1.intValue();返回基本类型int
int x2 = Integer.parseInt("100");//把string转换为int
String s = n1.toString()//把integer变为string
Integer.getInteger(String)读取系统变量得到对应的值。
(2)自动装箱:Integer n = 99;
自动拆箱:int i = n;
装箱和拆箱会影响执行效率。
当Integer变为int,而为null时报错。
(3)整数和浮点数包装类型继承自Number,可以向下转型为byte,int,long,float,double
Number num = new Integer(999);
byte(byte,int,long,float,double) b = num.byte(byte,int,long,float,double)Value();
4.枚举类型
用enum关键字定义常量:
关键字enum定义常量类型
常量本身带有类型信息
使用 ==比较 if(day == Weekday.FRI)
public enum Weekday{
SUN,MON,TUE,WED,THU,FRI,SAT;
}
Enum定义的类型实际上是class,
继承自java.lang.Enum,
不能通过new创建实例
所有常量都是唯一实例,可以用switch语句
编译器编译出的class
public final class Colar extends Enum{
public static final Color RED = new Color();
}
name()获取常量定义的字符串,注意不要使用toString()
ordinal()获取定义的顺序
可以为enum类编写构造方法。字段和方法
构造方法声明为private
5.常用工具类
math
Math.random()生成一个随机数
double x1 = Math.random();
long MIN = 1000;
long MAX = 9000;
double x2 = Math.random()*(MAX - MIN) + MIN;
double r = (long) x2;
Random r = new Random();用来创建伪随机数
r.nextInt(10);生成下一个随机int,生成0-10之间的随机数,不包括10
伪随机数:给定种子后伪随机数会生成完全相同的序列
不给定种子时Random是用系统当前时间戳作为种子。
SecureRandom用来创建安全的随机数 缺点比较慢
SecureRandom sr = new SecureRandom();
for(int i = 0;i < 10;i++){
System.out.println(sr.nextInt(100));
}
BigInteger用任意多个int[]来表示非常大的整数
BigDecimal表示任意精度的浮点数
BigInteger和BigDecimal都继承自Number,可以和其他的基本类型转换。
6. javabean
许多class的定义都符合:
若干private实例字段
通过public方法读写实例字段
public class Person {
private String name;
private int age;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
符合这种class的敷方法叫javabean
把一组getter和setter称为属性(Property)
}