1.1 字符串(String)
1.1.1 String对象的创建原理
创建原理:
//字符串实际值
private final char value[];
//空字符串构造
public String() {this.value = "".value;}
//有参(字符串)字符串构造
public String(Stringoriginal) {
this.value = original.value;
this.hash= original.hash;}
//字符数组的输出
System.out.println({‘a’,’b’}) ------ ab
故而System.out.println(“ab”)等同System.out.println({‘a’,’b’})
创建区域:
1:当使用任何方式来创建一个字符串对象s时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加。
2:Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。
3:使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。
4:使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。
*jdk1.7,常量池移到了堆中;jdk1.8,用元空间取缔常量池。
1.1.2字符串常用方法
1、获取长度 *.length();//这与数组中的获取长度不同,*.length;
2、比较字符串
(1) equals() //判断内容是否相同
(2)compareTo() //判断字符串的大小关系(字典顺序)
(3)compareToIgnoreCase(String int) //在比较时忽略字母大小写
(4)= = //判断内容与地址是否相同
(5)equalsIgnoreCase()//忽略大小写的情况下判断内容是否相同
如果想对字符串中的部分内容是否相同进行比较,可以用
(6)reagionMatches()//有两种
publicboolean regionMatches(int toffset, String other,int ooffset,int len);表示如果String对象的一个子字符串与参数other的一个子字符串是相同的字符序列,则为true.要比较的String 对象的字符串从索引toffset开始,other 的字符串从索引ooffset开始,长度为len。
public booleanreagionMatches(boolean gnoreCase,int toffset,String other,int ooffset,int len);//用布尔类型的参数指明两个字符串的比较是否对大小写敏感。
3、查找字符串中某个位置的字符
public char charAt(int index);//返回指定索引index位置上的字符,索引范围从0开始
4、查找指定字符串在字符串中第一次或最后一词出现的位置
在String类中提供了两种查找指定位置的字符串第一次出现的位置的方法
(1)public int indexOf(String str);//从字符串开始检索str,并返回第一次出现的位置,未出现返回-1
(2)public intindexOf(String str,int fromIndex);//从字符串的第fromIndex个字符开始检索str
查找最后一次出现的位置有两种方法
(1)public int lastIndexOf(String str);
(2)public int lastIndexOf(String str,int fromIndex);
如果不关心字符串的确切位置则可使用public boolean contains(CharSequence s);
5、检查字符串的起始字符和结束字符
开始的字符串两种方法
(1)public boolean starWith(String prefix,int toffset);//如果参数prefix表示的字符串序列是该对象从索引toffset处开始的子字符串,则返回true
(2)public boolean starsWith(String prefix);
结束的字符串方法
public boolean endsWith(String suffix);
6、截取子串
(1)public String subString(int beginIndex);//返回的字符串是从beginIndex到结束
(2)public String subString(intbegin Index,int endIndex);//返回的字符串是从beginIndex开始到endIndex-1。 要返回后4位可以这样写Syetem.out.println(*.subString()(*.length()-4));
7、字符串的替换
两种方法
(1)public String replace(char oldChar,char newChar);//只替换检测到的第一个字符
(2)public String replace(CharSequenc etarget,CharSequence replacement);//把原来的etarget子序列替换为replacement序列,返回新串
(3)public String replaceAll(Stringregex,String replacement);//用正则表达式实现对字 符串的匹配
8、字符串的大小写替转换
(1)public String toLowerCase(Locale locale);
(2)public String toLowerCase();
(3)public String toupperCase(Locale locale);
(4)public String toUpperCase();
9、去除字符串首尾空格
*.trim();
10、字符串转换
1、将字符串转换成字符数组
public char[] toCharArray();
2、将字符串转换成字符串数组
public String[] split(Stringregex);//regex 是给定的匹配,为转义字符串
3、将其它数据类型转化为字符串
(1)public static String valueOf(booleanb);
(2)public static String valueOf(char c)
(3)public static String valueOf(int i);
(4)public static String valueOf(long i);
(5)public static String valueOf(float f);
(6)public static String valueOf(doubled);
(7)public static String valueOf(char[]data);
(8)public static String valueOf(Objectobj);
11、将字符按照某种格式输出
String.format(reg,str)//reg为转义字符串
整数型(十进制):d Unicode字符:c
Boolean值:b String:s
浮点数(十进制):f 浮点数(科学记数法):e
整数(十六进制):x 任意字符:%
12、intern 方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中
1.1.3 可变字符串(StringBuffer和StringBuilder)
StringBuffer类主要方法的使用:
1、获取可变字符串长度
(1)publicint length();
(2)publicint capacity();
(3)publicvoid setLength(int newLength);
2、比较可变字符串
用String 类的equals()方法比较,但是不同。
类Object中的equals()方法比较的是两个对象的地址是否相等,而不仅仅是比较内容,但是String类在继承Object类的时候重写了equals()方法,只是比较两个对象的内容是否相等
而在StringBuffer类中没有重写Object类的equals()方法,所以比较的是地址和内容。
3、追加和插入字符串
(1)追加 public StringBuffer append(type t);
(2)插入 public StringBuffer insert(int offset,type t);//在offset处加入类型为type的字符串
4、反转和删除字符串
(1)反转 public StringBuffer reverse();
(2)删除 public StringBuffer delete(int start,int end);
5、减少用于可变字符序列的存储空间
public voidtrimToSize();
6、StringBuffer类转换成String类
public String toString();
*StringBuffer:线程安全,效率低。
StringBuilder(和StringBuffer等价):线程不安全,单效率高。(推举使用)
1.1.4 正则表达式
字符
c 字符c
\unnnn, \xnn,\0n, \0nn, \0nnn 带有十六或八进制值的代码单元
\0n 八进制0n代表的字符(0<=n<=7)
\0nn 八进制0nn代表的字符(0<=n<=7)
\0mnn 八进制0mnn代表的字符(0<=m<=3,0<=n<=7)
\xnn 十六进制 0xnn所代表的字符
\uhhhh 十六进制 0xhhhh所代表的字符
\t, \n, \r, \f,\a, \e控制字符,依次是制表符,换行符,回车符,换页符,报警符和转义符
\cc 控制字符中出现的相应字符c
字符类
[C1C2. . .] C1、C2……中的任何字符。Ci可以是字符,字符范围(C1-C2)或者字符类。
[^. . .] 字符类的补集
[ . . .&& . . .] 两个字符类的交集
预定义字符类
. 除行终止符外的任何字符(如果DOTALL标志置位,则表示任何字符)
\d 数字[0-9]
\D 非数字[^0-9]
\s 空白字符[\t\n\r\f\x0B]
\S 非空白字符
\w 单词字符[a-zA-Z0-9_]
\W 非单词字符
\p{name} 一个指定的字符类
\P{name} 指定字符类的补集
边界匹配符
^ 和$ 输入的开头和结尾(在多行模式(multilinemode)下是行的开头和结尾)
\b 单词边界
\B 非单词边界
\A 输入的开头
\z 输入的结尾
\Z 除最后行终止符之外的输入结尾
\G 上个匹配的结尾
量词
X? 可选的X(即X可能出现,也可能不出现)
X* X,可以重复0次或多次
X+ X,可以重复1次或多次
X{n} X{n,}X{n,m} X重复n次,至少重复n次,重复n到m次
量词后缀(表达式所有量词都要加)
? 设默认(贪婪)匹配为reluctant(勉强)匹配
+ 设默认(贪婪)匹配为possessive(强制)匹配
贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。
非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。
集合操作
XY X的匹配后面跟着Y的匹配
X|Y X或Y的匹配
分组
(X) 匹配X并且在一个自动计数的分组中捕获它
\n 与第n个分组的匹配
转义
\c 字符c(必须不是字母)
\Q...\E 逐字地引用...
(?...) 特殊构造,看Pattern类的API
方法:
Pattern:
static Pattern compile(String expression)
static Pattern compile(String expression, int flags)(获取Pattern对象)
Matches:
booleanmatches()//返回输入是否与模式匹配
booleanlookingAt()//如果输入的起始匹配模式则返回True
boolean find() 与boolean find(intstart)//尝试查找下一个匹配,并在找到匹配时返回True
int start()
int end()//返回当前匹配的起始位置和结尾后位置
int groupCount()//返回输入模式中的分组数
int start(intgroupIndex)
int end(intgroupIndex)//返回一个给定分组当前匹配中的起始位置和结尾后位置
String group(int groupIndex)//返回匹配一个给定分组的字符串, groupIndex分组索引(从1开始),0表示整个匹配
StringreplaceAll(String replacement)
String replaceFirst(Stringreplacement)//返回从matcher输入得到的字符串,但已经用替换表达式替换所有或第一个匹配
1.2 数组
打印数组元素:Arrays.toString(intArray)
将数组转型为集合:
ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));
替换数组元素:Arrays.fill(arr,index)
数组排序:Arrays.sort(arr)
复制数组:Arrays.copyOfRangearr,start,end)
数组查询:Arrays.binarySearch(arr,from,to,key)
1.3 键盘录入
Scanner in = newScanner(System.in);
获取字符串; in.nextLine(); 获取任意字符串(只有它包括特殊字符)
in.next(); 不包含特殊字符,如空格、回车等
二者千万不能混用
整数等: in.nextInt(); in.nextFloat();--------------
1.4 Math类
static double abs(double a)//此方法返回一个double值的绝对值.
static floatabs(float a)//此方法返回一个float值的绝对值.
static intabs(int a)//此方法返回一个int值的绝对值.
static longabs(long a)//此方法返回一个long值的绝对值.
static double acos(double a)//此方法返回一个值的反余弦值,返回的角度范围从0.0到pi.
static double asin(double a)//此方法返回一个值的反正弦,返回的角度范围在-pi/2到pi/2.
static double atan(double a)//此方法返回一个值的反正切值,返回的角度范围在-pi/2到pi/2.
static doubleatan2(double y, double x)//此方法返回角度theta(x,y)从转换的矩形坐标到极坐标(r,θ).
static double cbrt(double a)//此方法返回一个double值的立方根.
static double ceil(double a)//此方法返回最小的(最接近负无穷大)double值,大于或等于参数,并等于一个整数.
static doublecopySign(double magnitude, double sign)//此方法返回的第一个浮点参数与第二个浮点参数的符号.
static floatcopySign(float magnitude, float sign)//此方法返回的第一个浮点参数与第二个浮点参数的符号.
static doublecos(double a)//此方法返回一个角的三角余弦.
static doublecosh(double x)//此方法返回一个double值的双曲余弦.
static double exp(double a)//此方法返回欧拉数e的一个double值的次幂.
static double expm1(double x)//此方法返回 ex -1.
static double floor(double a)//此方法返回最大的(最接近正无穷大)double值小于或相等于参数,并相等于一个整 数.
static intgetExponent(double d)//此方法返回的无偏指数在该项表述的double.
static intgetExponent(float f)//此方法返回一个浮点数的表示中使用的无偏指数.
static doublehypot(double x, double y)//没有中间溢出或下溢的情况下,此方法返回的sqrt(x2 +y2) .
static doubleIEEEremainder(double f1, double f2)//这两个参数,IEEE 754标准规定的方法计算,其余操作.
static double log(double a)//此方法返回一个double值的自然对数(以e为底).
static double log10(double a)//此方法返回一个double值以10为底.
static doublelog1p(double x)//此方法返回自然对数的总和的参数.
static double max(double a, double b)//此方法返回两个double值较大的那一个.
static floatmax(float a, float b)//此方法返回的两个浮点值最大的那一个.
static intmax(int a, int b)//此方法返回两个int值中最大的那一个.
static longmax(long a, long b)//此方法返回的两个long值中最大的那一个.
static double min(double a, double b)//此方法返回的两个较小的double值.
static floatmin(float a, float b)//此方法返回的两个较小的浮动值.
static intmin(int a, int b)//此方法返回的两个较小的int值.
static longmin(long a, long b)//此方法返回的两个较小的长值.
static doublenextAfter(double start, double direction)//此方法返回浮点数相邻方向的第二个参数,第一个参数.
static floatnextAfter(float start, double direction)//此方法返回浮点数相邻方向的第二个参数,第一个参数.
static doublenextUp(double d)//在正无穷大的方向,此方法返回至d相邻的浮点值.
static floatnextUp(float f)//此方法返回到f相邻的浮点值在正无穷方向上.
static double pow(double a, double b)//此方法返回的第一个参数的值提升到第二个参数的幂
static double random()//该方法返回一个无符号的double值,大于或等于0.0且小于1.0.
static double rint(double a)//此方法返回的double值,值的参数是最接近的,相等于一个整数.
static long round(double a)//此方法返回的参数最接近的long.
static intround(float a)//此方法返回的参数最接近的整数.(对a+0.5进行floor操作)
static doublescalb(double d, int scaleFactor)//此方法返回d×2scaleFactor 四舍五入,如果由一个单一的正确舍入的浮点乘法的 double值组的成员.
static floatscalb(float f, int scaleFactor)//此方法返回f×2scaleFactor 四舍五入,如果由一个单一的正确舍入的浮点乘法,浮点 值集合的成员.
static doublesignum(double d)//此方法返回signum函数的参数,如果参数是零返回0,如果参数大于零返回1.0,如果 参数小于零返回-1.0.
static floatsignum(float f)//此方法返回signum函数的参数,如果参数是零返回0,如果参数大于零返回1.0f,如 果参数小于零返回-1.0f.
static doublesin(double a)//此方法返回一个double值的双曲正弦.
static doublesinh(double x)//此方法返回一个double值的双曲正弦.
static double sqrt(double a)//此方法返回正确舍入的一个double值的正平方根.
static doubletan(double a)//此方法返回一个角的三角函数正切值
static doubletanh(double x)//此方法返回一个double值的双曲正切.
static doubletoDegrees(double angrad)//这种方法大致相等的角度,以度为单位的角度转换成弧度测量.
static doubletoRadians(double angdeg)//此方法转换一个角度,以度为单位大致相等的角弧度测量.
static doubleulp(double d)//此方法返回的参数的ulp的大小.
static doubleulp(float f)//此方法返回的参数的ulp的大小.
1.5 Object类
equals()方法:
用于测试某个对象是否同另一个对象相等。它在Object类中的实现是判断两个对象是 否指向同一块内存区域。这中测试用处不大,因为即使内容相同的对象,内存区域也 是不同的。如果想测试对象是否相等,就需要覆盖此方法,进行更有意义的比较(需 要先重写hashcode())。
toString():
返回该对象的字符串表示。Object类中的toString()方法会打印出类名和对象的内存 位置。几乎每个类都会覆盖该方法,以便打印对该对象当前状态的表示。大多数(非 全部)toString()方法都遵循如下格式:类名[字段名=值,字段名=值...],当然, 子类应该定义自己的toString()方法。
Object()
默认构造方法
clone()
创建并返回此对象的一个副本。
finalize()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
getClass()
返回一个对象的运行时类。
hashCode()
返回该对象的哈希码值。
notify()
唤醒在此对象监视器上等待的单个线程。
notifyAll()
唤醒在此对象监视器上等待的所有线程。
wait()
导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方 法。
wait(long timeout)
导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方 法,或者超过指定的时间量。
wait(long timeout, int nanos)
导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方 法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。
1.6 System类
1. 成员属性
in out err
in标准输入流(键盘输入)
out 标准输出流(显示器输出)
err 标准错误输出流(显示器输出)
2、成员方法
public staticvoid arraycapy(Object src,int srcPos,Object dest,intdextPos,int length)//该方法的作用是数组拷贝,也就是将一个数组中内容复制到另外一个数组中的指定位置,由于该方法是native方法,所以性能上比使用循环高效。
public staticlong currentTimeMillis()//该方法的作用是返回当前计算机的时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号,0时0分0秒所差的时间的毫秒数。
public staticvoid exit(int status)//该方法的作用是退出程序。status的值为0代表正常退出,status的值为非0代表异常退出。
public staticvoid gc();//该方法的作用是请求系统进行垃圾回收。
public staticString getProperty(String key)//该方法的作用是获得系统中属性名为Key的属性对应的值。
1.7 日期(Date)和日历(Calendar)
1.7.1 日期
Date d = new Date();//获取当前时间
Date d1 = new Date(year ,mouth,day);//year = 实际年份-1900 mouth =实际月份-1;
getYear();getMouth();getDate();getDay();getHours;getMinutes();getSconds();//获取日期的年、月、日、星期、小时、分钟、秒
setYear();setMouth();setDate();getDay();setHours;setMinutes();setSconds();// 设置日期的年、月、日、星期、小时、分钟、秒
public long getTime()//日期转毫秒值
setTime(long time)//毫秒值转日期
toLocaleString();//将日期按照固有格式解析为字符串并返回(Date不推举使用)
1.7.2 日期格式
SimpleDateFormat sf = newSimpleDateFormat (String pattern)//获取日期格式
parse(String s)//将字符串按照日期格式解析成日期并返回
format(Date d)//将日期按照日期格式返回成字符串
SimpleDateFormat日期-时间格式模式参数:
字母 日期或时间元素 表示 示例
G Era标志符 Text AD
y 年 Year 1996; 96
M 年中的月份 Month July;07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数 Number 0
k 一天中的小时数 Number(0-23) 24
K am/pm 中的小时数 Number(0-11) 0
h am/pm 中的小时数 Number(1-12) 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 PacificStandard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
1.7.3 日历
Calendar c =Calendar.getInstance();//获取日历对象
Date date = calendar.getTime();//从一个 Calendar 对象中获取 Date 对象
calendar.setTime(date);//将 Date 对象反应到一个 Calendar 对象中,获取的月份=实际月份-1
set(int field, int value)//设置"年/月/日/小时/分钟/秒/微秒"等值
get(int field, int value)//获取"年/月/日/小时/分钟/秒/微秒"等值
add(int field, (-+)intvalue)//修改"年/月/日/小时/分钟/秒/微秒"等值
1.8 封装类
基本类型和包装类的对应
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
任意整数 BigInteger
任意精度 BigDecimal
构造方法
public Type(type value)
public Type(String value)//Character不可用
基本方法
valueOf(String s);//返回Integer类型
parseInt(String s);//返回int类型
add(BigDecimal);//BigDecimal对象中的值相加,然后返回这个对象。
Subtract(BigDecimal);//BigDecimal对象中的值相减,然后返回这个对象。
multiply(BigDecimal);//BigDecimal对象中的值相乘,然后返回这个对象。
divide(BigDecimal);//BigDecimal对象中的值相除,然后返回这个对象。
toString();//将BigDecimal对象的数值转换成字符串。
doubleValue();//将BigDecimal对象中的值以双精度数返回。
floatValue();//将BigDecimal对象中的值以单精度数返回。
longValue();//将BigDecimal对象中的值以长整数返回。
intValue();//将BigDecimal对象中的值以整数返回。
(2^1023是可获取数据的最大值)