《Java语言最新实用教程(第2课)》由会员分享,可在线阅读,更多相关《Java语言最新实用教程(第2课)(36页珍藏版)》请在金锄头文库上搜索。
1、Java实用教程第二课第二课第1章 JAVA语言概述目录n1.5.6 Math类n1.5.7 数据类型转换n1.6 字符串和日期1.5.6 Math类类n在编写程序时,可能需要计算一个数的平方根、绝对值、获取一个随机数等等。java.lang包中的类包含许多用来进行科学计算的类方法,这些方法可以直接通过类名调用。另外,Math类还有两个静态常量,E和PI,它们的值分别是: 2.7182828284590452354和 3.14159265358979323846。Math类常用方法 npublic static long abs(double a) 返回a的绝对值。npublic static
2、 double max(double a,double b) 返回a、b的最大值。npublic static double min(double a,double b) 返回a、b的最小值。npublic static double random() 产生一个0到1之间的随机数(不包括0和1)。npublic static double pow(double a,double b) 返回a的b次幂。npublic static double sqrt(double a) 返回a的平方根。npublic static double log(double a) 返回a的对数。npublic st
3、atic double sin(double a) 返回正弦值。npublic static double asin(double a) 返回反正弦值。 1.5.7数据类型转换数据类型转换1.自动类型转换及强制转换自动类型转换及强制转换n按精度从按精度从“低低”到到“高高”排列:排列:nbyte short char int long float double 低低高,系统自动完成数据类型的转换:高,系统自动完成数据类型的转换:n float x=100; n高高低,必须使用显示类型转换运算低,必须使用显示类型转换运算n int x=(int)34.89; nbyte a=(byte)128;
4、 强制转换运算可能导致精度的损失强制转换运算可能导致精度的损失 boolean与其他数据类型不可以互相转换与其他数据类型不可以互相转换其他转换其他转换n数字变成字符串数字变成字符串qDouble.toString(double d)qInteger.toString(int i)qLong Float Short Byten数字类型转变为各种常用进制的字符串数字类型转变为各种常用进制的字符串qtoBinaryString(long or int)qtoOctalString(long or int)qtoHexString(long or int)n字符串转为数字字符串转为数字qInteger
5、.parseInt(String s)qFloat.parseFloat(String s)qByte Short Long Double1.6 字符串和日期在Java语言中,提供了一个专门用来操作字符串的类java.lang.String,在本节将学习该类的使用方法。创建字符串对象 声明并初始化字符串的常用语法如下:String 字符串变量 = 字符串;String aStr = null;/ 初始化为空值String bStr = “”;/ 初始化为空字符串String cStr = “MWQ”;/ 初始化为“MWQ”String cStr =new String(“BMW”);/ 初始化
6、为”BMW”String dStr =new String(“”); / 初始化为空字符串Char aChr =h,a,p,p,y;String aStr=new String(aChr);String bStr=new String(aChr,1,3);/提取aChr中从第一个位置开始,三个字符,组成新的字符串连接字符串连接字符串可以通过运算符“+”实现,将多个字符串合并到一起生成一个新的字符串。对于“+”运算符,如果有一个操作元为String类型,则为字符串连接运算符,将生成新的字符串。【例2-5】 通过运算符“+”连接字符串。String love = “耐心”+“真心”;String
7、aStr = “单价:”+5元;/ “单价:5元”String bStr = “15”+15;/ “1515”字符串操作在使用字符串时,经常需要对字符串进行处理,以满足一定的要求。常用的字符串操作包括:n比较字符串n获取字符串的长度n字符串的大小写转换n查找字符串n截取子字符串n去掉字符串的首尾空格n替换字符串中的字符或子串n分割字符串equals() 和和equalsIgnoreCase()startsWith() 和和endsWith()compareTo()length()toLowerCase()和和toUpperCase()indexOf(int ch) 和和indexOf(Stri
8、ng str)lastIndexOf (int ch) 和和lastIndexOf(String str)indexOf(int ch, int startIndex) lastIndexOf (int ch, int startIndex) indexOf(String str, int startIndex) lastIndexOf(String str, int startIndex)substring()trim()replace()和和replaceFirst()split()比较字符串 equals()方法由于字符串是对象类型,所以不能简单地用“=”(双等号)判断两个字符串是否相等
9、public boolean equals(String str)注意:equals()方法在比较两个字符串时区分字母大小写。String tom=new String( we are students);String boy=new String( We are students);String jerry= new String(we are students);System.out.println(tom.equals(boy);System.out.println(tom.equals(jerry);System.out.println(tom=jerry);false true fa
10、lse比较字符串equalsIgnoreCase()方法equalsIgnoreCase()方法在比较两个字符串时不区分大小写public boolean equalsIgnoreCase(String str)注意: equalsIgnoreCase()方法不区分字母大小写。String tom=new String( we are students);String boy=new String( We are students);String jerry= new String(we are students);System.out.println(tom.equalsIgnoreCase
11、 (boy);System.out.println(tom.equalsIgnoreCase (jerry);System.out.println(tom=jerry);比较字符串startsWith() 和endsWith()方法这两方法分别用于判断字符串是否以指定的字符串开始或结束,它们的定义如下:参数prefix和suffix为欲比较的字符串对象,该方法的返回值为boolean型,public boolean startsWith(String prefix)public boolean endsWith(String suffix)String str = “We are studen
12、ts;boolean bs = str.startsWith(“a”); / 比较结果bs为falseboolean be = str.endsWith(“ents); / 比较结果be为truepublic boolean startsWith(String prefix, int toffset)重载方法,索引位置开始是否为指定的字符串获取字符串的长度String nameStr = MingRiSoft;int i = nameStr.length();/ 获得字符串的长度为10字符串的大小写转换String str = AbCDefGh;String lStr = str.toLowe
13、rCase(); / 结果为“abcdefgh”String uStr = str.toUpperCase();/ 结果为“ABCDEFGH”查找字符串n indexOf():搜索字符或字符串首次出现的位置。n lastIndexOf():搜索字符或字符串最后一次出现位置如果未搜索到字符串则返回-1。nindexOf(int ch)和 indexOf(String str) q获取指定字符或字符串在原字符串中第一次出现的索引。nlastIndexOf (int ch)和 lastIndexOf(String str) q获取指定字符或字符串在原字符串中最后一次出现的索引。 nindexOf(i
14、nt ch, int startIndex)指定索引位置开始第一次出现的索引nlastIndexOf (int ch, int startIndex)q指定索引位置开始最后一次出现的索引nindexOf(String str, int startIndex) nlastIndexOf(String str, int startIndex)查找字符串例如下面的代码:String str = mingrikeji;int i = str.indexOf(i);System.out.println(字符i第一次出现在索引: + i); / 索引值是1i = str.lastIndexOf(i);Sy
15、stem.out.println(字符i最后一次出现在索引: + i); / 索引值是9i = str.lastIndexOf(ri);System.out.println(字符串ing第一次出现在索引: + i); / 索引值是4i = str.lastIndexOf(ri);System.out.println(字符串ing最后一次出现在索引: + i); / 索引值是4i = str.lastIndexOf(i, 4);System.out.println(从第5个字符开始,字符i第一次出现在索引: + i);/ 索引值是1截取子字符串通过String类的substring()方法,可以
16、从现有字符串中截取子字符串,有两个重载方法,具体定义如下:方法substring(int beginIndex)用来截取从指定索引位置到最后的子字符串,截取得到的字符串包含指定索引位置的字符。public String substring(int beginIndex)public String substring(int beginIndex, int endIndex)截取子字符串例如下面的代码截取字符串“ABCDEF”从索引位置3到最后得到的子串为“DEF”,在子串“DEF”中包含字符串“ABCDEF”中索引为3的字符D:String str = ABCDEF;System.out.pr
17、intln(str.substring(3); / 截取得到的子串为“DEF”截取子字符串方法substring(int beginIndex, int endIndex)用来截取从起始索引位置beginIndex到终止索引位置endIndex的子字符串,截取得到的字符串包含起始索引位置beginIndex对应的字符,但是不包含终止索引位置endIndex对应的字符。String str = ABCDEF;System.out.println(str.substring(2, 4); / 截取得到的子串为“CD”去掉字符串的首尾空格通过String类的trim()方法,可以通过去掉字符串的首尾
18、空格得到一个新的字符串,该方法的具体定义如下:public String trim()String str = ABC ; / 定义一个字符串,首尾均有空格System.out.println(str.length(); / 输出字符串的长度为5String str2 = str.trim(); / 去掉字符串的首尾空格System.out.println(str2.length(); / 输出字符串的长度为3替换字符串中的字符或子串通过String类的replace()方法,可以将原字符串中的某个字符替换为指定的字符,并得到一个新的字符串,该方法的具体定义如下:例如将字符串“NBA_NBA_
19、NBA”中的字符“N”替换为字符“M”,将得到一个新的字符串“MBA_MBA_MBA”,具体代码如下:public String replace(char oldChar, char newChar)String str = NBA_NBA_NBA;System.out.println(str.replace(N, M); / 输出MBA_MBA_MBA替换字符串中的字符或子串如果想替换掉原字符串中的指定子串,可以通过String类的replaceAll()方法,该方法的具体定义如下:例如将字符串“NBA_NBA_NBA”中的子串“NB”替换为字符串“AA”,将得到一个新的字符串“AAA_AA
20、A_AAA”,具体代码如下:public String replaceAll(String regex, String replacement)String str = NBA_NBA_NBA;System.out.println(str.replaceAll(NB, AA);/ 输出的新字符串为AAA_AAA_AAA替换字符串中的字符或子串如果只需要替换原字符串中的第一个子串,可以通过String类的replaceFirst()方法,该方法的具体定义如下:例如将字符串“NBA_NBA_NBA”中的第一个子串“NB”替换为字符串“AA”,将得到一个新的字符串“AAA_NBA_NBA”,具体代码
21、如下:public String replaceFirst(String regex, String replacement)String str = NBA_NBA_NBA;System.out.println(str.replaceFirst(NB, AA);/ 输出的新字符串为AAA_NBA_NBA分割字符串在String类中提供了两个重载的split()方法,用来将字符串按照指定的规则进行分割,并以String型数组的方式返回,分割得到的子串在数组中的顺序按照它们在字符串中的顺序排列。方法的具体定义如下:public String split(String regex, int lim
22、it)分割字符串该方法的第一个参数regex为分割规则,第二个入口参数limit用来设置分割规则的应用次数,所以将影响返回的结果数组的长度。如果limit大于0,则分割规则最多将被应用(limit-1)次,数组的长度也不会大于limit,并且数组的最后一项将包含超出最后匹配的所有字符。如果limit为负数,则分割规则将被应用尽可能多的次数,并且数组可以是任意长度;需要注意的是,如果limit为0,数组中位于最后的所有空字符串元素将被丢弃。分割字符串下面将字符串“boo:and:foo”分别按照不同的规则和限制进行分割:String str = boo:and:foo;String a = st
23、r.split(:, 2);String b = str.split(:, 5);String c = str.split(:, -2);String d = str.split(o, 5);String e = str.split(o, -2);String f = str.split(o, 0);String g = str.split(m, 0);分割字符串上面代码得到的7个数组的相关信息如下表所示。数 组分 割 符限 定 数得到的数组a:2String a = boo, and:foo ;b:5String b = boo, and, foo ;c:-2String c = boo,
24、and, foo ;do5String d = b, , :and:f, , ;eo-2String e = b, , :and:f, , ;fo0String f = b, , :and:f ;gm0String g = boo:and:foo ;格式化字符串通过String类的format()方法,可以得到经过格式化的字符串对象,最常用的是对日期和时间的格式化。String类中的format()方法有两种重载形式,它们的具体定义如下:参数format为要获取字符串的格式;参数args为要进行格式化的对象;参数locale为格式化字符串时依据的语言环境。format(String forma
25、t, Object obj)方法将依据本地的语言环境进行格式化。public static String format(String format, Object obj)public static String format(Locale locale, String format, Object obj)格式化字符串转 换 符功 能 说 明转换符功能说明%s格式化成字符串表示%a格式化成十六进制浮点数%c格式化成字符型表示%e格式化成指数形式表示%b格式化成逻辑型表示%g格式化成通用浮点数型数表示(f和e类型中较短的)%d格式化成十进制整型数表示%h格式化成散列码形式表示%x格式化成十六进
26、制整型数表示%格式化成百分比形式表示%o格式化成八进制整型数表示%n换行符%f格式化成十进制浮点数型数表示%tx格式化成日期和时间形式表示(其中x代表不同的日期与时间转换符)格式化字符串下面是三个获取格式化字符串的例子,分别为获得字符A的散列码、将68格式化为百分比形式和将16.8格式化为指数形式,代码如下:String code = String.format(“%h”, A); / 结果为“41”String percent = String.format(“%d%”, 68); /结果为“68%”String exponent = String.format(“%e”, 16.8); /
27、结果为“1.680000e+01”StringBuffer类类nString类创建的字符串对象是不可修改的,也就是说,String字符串不能修改、删除或替换字符串中的某个字符,即String对象一旦创建,那么实体是不可以再发生变化的.nStringBuffer类能创建可修改的字符串序列,也就是说,该类的对象的实体的内存空间可以自动的改变大小,便于存放一个可变的字符序列。Date类类 nDate类在java.util包中。使用Date类的无参数构造方法创建的对象可以获取本地当前时间。Date对象表示时间的默认顺序是:星期、月、日、小时、分、秒、年。例如:Sat Apr 28 21:59:38 C
28、ST 2001 。 n可以使用DataFormat的子类SimpleDateFormat来实现时期的格式化。SimpleDateFormat有一个常用构造方法: public SimpleDateFormat(String pattern)。n该构造方法可以用参数pattern指定的格式创建一个对象 .npattern中应当含有一些特殊意义字符,这些特殊的字符被称做元字符,例如:ny或yy 表示用2位数字输出年份;yyyy表示用4为数字输出年份。nM 或MM 表示用2为数字或文本输出月份,如果想用汉字输出月份,pattern中应连续包含至少3个M,如:MMM。nd 或dd 表示用2为数字输出日
29、。nH或HH 表示用两位数字输出小时。nm或mm 表示用两位数字输出分。ns或ss 表示用两位数字输出秒。nE 表示用字符串输出星期。Calendar类类nCalendar类在java.util包中。使用Calendar类的static方法getInstance()可以初始化一个日历对象,如:nCalendar calendar= calendar.getInstance();n然后,calendar对象可以调用方法:set(int year,int month,int date)set(int year,int month,int date,int hour,int minute)set(i
30、nt year,int month, int date, int hour, int minute,int second)将日历翻到任何一个时间,当参数year取负数时表示公元前。n calendar对象调用方法: public int get(int field)可以获取有关年份、月份、小时、星期等信息,参数field的有效值由Calendar的静态常量指定,例如:calendar.get(Calendar.MONTH);返回一个整数,如果该整数是0表示当前日历是在一月,该整数是1表示当前日历是在二月等。n日历对象调用public long getTimeInMillis()可以将时间表示为毫秒。