javaSE(08)(字符串三姐妹)

来源:互联网 发布:区块链 数据确权 编辑:程序博客网 时间:2024/04/28 14:36

字符串三姐妹
1.Object类是一切类的祖先,处于最顶层,我们自定义的类都默认自动继承自Object类,常用的方法:(1)equals()方法对象(引用类型)之间的相等判断。toString()返回该对象的字符串表示getClass():返回该对象的运行时类型。hashCode()返回该对象的哈希码。
2.java中的“==”比较的是引用地址是否相同,而不是内存空间的内容是否相同。基本数据类型可以使用“==”,引用类型就不能使用“==”来比较是否相等。为了实现引用类型的相等判断,我们自定义的类就必须重写Object类中的equals()方法。Java中的File类、Date类、String类已经重写了equals方法。
3.hashCode()方法:哈希码就是为了区分对象用的,相当于对象的身份证号码。建议自定义类的时候尽量重写equals()和hashCode()方法。
4.toString()方法:java中的对象如果直接通过System.out.print()进行输出,得到的是一个由类名、@和此对象哈希码组成的字符串。输出一个对象时默认会自动调用该对象的toString()方法,该方法继承自父类Object类。Object类提供的toString()方法默认返回一个由类名、@和此对象的哈希码组成的字符串,用来表示该对象。java推荐自定义类时重写toString()方法。
5.getClass()方法:返回某个对象的数据类型。Car car=new Car();Class c=car.getClass();System.out.println(c.getName());


6.String类:String类是一种特殊的引用类型,支持两种写法。常用的构造方法:(1)空构造:public String()(2)参数为字节数组:public String(byte[] bytes)(3)参数为字符数组:public String(char[] value)
7.String 对象的不可变性:字符串一旦初始化后就不可以改变,这里指的是内存空间中的值不可变。
8.String类的判断功能:boolean equals(Object obj);boolean equalsIgnoreCase(String str);boolean contains(String str);boolean startsWith(String str);boolean endsWith(String str);boolean isEmpty() ; boolean Matches(String regex)
9.String类的获取功能:int length();char charAt(int index);int indexOf(int ch) 和int indexOf(String str); int indexOf(int ch,int fromIndex)和int indexOf(String str,int fromIndex); String substring(int start)和String substring(int start,int end)
10.String 类的转换功能:11.String类的其他功能:


12.StringBuffer类:StringBuffer类是字符串缓冲区,和String类似用来存储字符串数据,常用的构造方法:public StringBuffer(),无参构造方法,构造一个空的字符串缓冲区,初始容量为16个字符。public StringBuffer(int capacity),构造一个指定容量的空的字符串缓冲区。public StringBuffer(String str),使用一个字符串作为初始内容来构造一个字符串缓冲区,并在后面预留16个字符的空缓冲区。
13.StringBuffer类的常用方法:public StringBuffer append(任意类型 o),把任意类型数据的字符串表达形式追加到缓冲区的最后(例如:如果是对象,追加的是其toString方法的返回值)。public StringBuffer insert(int offset,任意类型 o),把任意类型的字符串表达形式插入到缓冲区指定位置。
public int capacity(),获得字符串缓冲区的当前容量。public int length(),获得字符串缓冲区内字符串的长度。

14.StringBuffer和String的区别:String是不可变的,StringBuffer是可变的,并且是县城安全的。
15.StringBuilder类:StringBuffer是线程安全的,保证同步。StringBuilder类是线程不安全的,不能保证同步,如果单线程使用字符串缓冲区,建议使用StringBuilder类,它比StringBuffer更快,在不考虑多线程的情况下,字符串三姐妹的效率:StringBuilder类 > StringBuffer类 > String类
如果连接字符串常量,使用字符串的“+”效率更高;如果连接字符串变量,使用StringBuffer的append方法效率更高
16.总结:(1)如果是少量的、不频繁的字符串操作,首选String(2)如果是单线程大量、频繁的操作字符串,推荐StringBuilder(3)如果是多线程大量、频繁的操作字符串,只能StringBuffer。
17.包装类:前面学过8种基本数据类型:byte、char、short、int、long、float、double和boolean,java为这8种基本数据类型都提供了相对应的包装类,常用于基本数据类型和字符串之间的相互转换,Byte、Character、Short、Integer、Long、Float、Double、Boolean,都是java.lang包,通过new关键字来创建对象。
18.自动装箱和拆箱,包装类和String类之间的相互转化:public static 包装类 valueOf(String s):把字符串转换为包装类。public String toString():
把包装类对象转换为字符串。
19.基本数据类型和String类之间的互转:基本数据类型转换为String,只需+”“即可,String.valueOf()效率更高。String转换为基本数据类型:
Double.parseDouble(String s),把字符串转换为double;Integer.parseInt(String s),把字符串转换为int;Float.parseFloat(String s),把字符串转换为float
20.正则表达式:用于复杂格式的匹配,是指一个用来描述或者匹配一系列符合某个规则的字符串,其实就是定义了一种规则。之前的equals是精确匹配,而正则表达式常用于格式上的匹配。常用符号:

21.匹配方法:(1)public boolean matches(String regex); String类的mathes方法用来测试字符串对象是否匹配某个正则表达式,匹配返回true,否则返回false String zz_phone=”0371-[1-9]\d{7}(-\d{1,3})?”;String val=”0371-86061160-223”;System.out.println(val.matches(zz_phone));
(2)java.util.regex包中提供了专门的类用于正则表达式:Pattern类的matches()方法就是如此,具体代码如下boolean result = Pattern.matches(zz_phone,val);


22.冒泡排序和选择排序,顺序查找和二分这半查找。
23.Arrays类:Arrays类属于java.util包,专用于数组操作,例如排序、查找、复制等,常用方法:public static void sort(xxx[] a) ,对数组a进行升序排序;public static int binarySearch(xxx[] a , xxx key),通过二分(折半)查找法搜索数组a中的key;public static xxx[] copyOf(xxx[] a , int newLength),通过复制数组a的newLength长度的数据到新数组;public static xxx[] copyOfRange(xxx[] a , int from , int to),通过复制数组a的指定范围的数据到新数组;public static boolean equals(xxx[] a1 , xxx[] a2),比较a1和a2两个数组是否一样。
24.Date类:public Date(),无参构造方法,可创建一个包含当前日期时间的Date对象(西方格式:Thu Oct 30 15:38:46 CST 2014)
public long getTime(),返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。常用于两个日期之间的比较。
25.calendar类:calendar类属于java.util包,用于日历的操作。Date类中的很多方法被废弃,并被Calendar类和DateFormat类中的方法替代。
常用方法:public static Calendar getInstance(),使用默认时区和语言环境获得一个日历对象(Calendar类是抽象类)
public int get(int field)返回日历对象中给定字段的值
public void set(int field, int value),设置日历对象中的给定字段的值
public final Date getTime(),返回日历中的日期时间对象
public final void setTime(Date date),设置日历中的日期时间对象
26.
27. 当我们需要进行大数(超出long和double)精确运算时,使用基本数据类型就不够用了,BigInteger类和BigDecimal类可以存储无限大的数字,主要用在科学计算上,我们平时一般用不到,这两个类都提供了常用的加减乘除等运算的方法,在进行大数精确运算时需要调用这些方法,而不能使用平时的“+-*/”等运算符。
28.获得系统的运行时间,System.current….

0 0