03.数学函数、字符和字符串
常用数学函数
java在Math类中提供了许多实用的方法(方法是一组语句,用于执行一个特定的任务),来计算常用的数学函数。
三角函数方法
sin(radians):返回以弧度为单位的角度的三角正弦函数值 cos(radians):返回以弧度为单位的角度的三角余弦函数值 tan(radians):返回以弧度为单位的角度的三角正切函数值 toRadians(degree):将以度为单位的角度值转换为以弧度显示 toDegrees(radians):将以弧度为单位的角度值转换为以度显示 asin(a):返回以弧度为单位的角度的反三角正弦函数值 acos(a):返回以弧度为单位的角度的反三角余弦函数值 atan(a):返回以弧度为单位的角度的反三角正切函数值
指数函数方法
exp(x):返回e的x次方
log(x):返回x的自然底数
log10(x):返回x的以10为底的对数
pow(a,b):返回a的b次幂
sqrt(x):返回x的平方根(x >= 0)
取整方法
ceil(x):向上取整,返回一个不小于x的最小整数
floor(x):向下取整,返回一个不大于x的最大整数
rint(x):取最接近x的整数
round(x):四舍五入取整
min、max、abs和random方法
min和max方法用于返回两个数的最小值和最大值,abs方法返回一个数的绝对值
random():生成大于等于0.0且小于1.0的double型随机数。
字符数据类型和操作
字符数据类型表示单个字符。字符数据类型用char来表示单个字符。字符型直接量用单引号括住。
char letter = 'A'; char numChar = '5'; //字符串直接量必须括在双引号中。而字符直接量是括在单引号中的单个字符。因此"A"是一个字符串,而'A'是一个字符。
Unicode和ASC2码
计算机内部使用二进制。一个字符在计算机中是以0和1构成的序列的形式来存储的。将字符映射到它的二进制形式的过程称为编码(encoding)。字符有多种不同的编码方式,编码表定义该如何编码每个字符。
java支持Unicode编码(Unicode又称为统一码、万国码、单一码,是国际组织制定的旨在容纳全球所有字符的编码方案,包括字符集、编码方案等,它为每种语言中的每个字符设定了统一且唯一的二进制编码,以满足跨语言、跨平台的要求。)Unicode码一开始被设计为16位的字符编码。基本数据类型char试图通过提供一种能够存放任意字符的简单数据类型来利用这个设计。但是,一个16位的编码能产生的字符只有65536个,它是不足以表示全世界所有字符的。因此,U能从的标准被扩展为1 112 064个字符。这些字符都远超了原来的16位限制。它们称为补充字符。java支持这些补充字符。这些字符都可以存储在一个char型变量中。
一个16位Unicode码占两个字节,用以\u开头的4位16进制数表示。范围从'\u0000'到'\uFFFF'.大多数计算机采用ASCII码(美国标准信息交换码),它是所有大小写字母、数字、标点符号和控制符的8位编码表。Unicode码包括ASCII码,从'\u0000'到'\u007F‘对应128个ASCII字符。
java程序中,可以使用像'a'、'5'和'&'这样的ASCII字符,也可以使用Unicode码。例如,下面的语句是等价的
char letter = 'A'; char letter = '\u0041'; //自增和自减操作符也可用在char型变量上。这会得到该字符之前或之后的Unicode字符 char ch = 'a'; System.out.println(ch++);
特殊字符的转义序列
假如你想定义带引号的信息,你能编写如下所示的这条语句吗?
String message = "鲁迅曾经说过:"老子没有说过"";
答案是不能 ,这条语句有语法错误,编译器会认为第二个引号为字符串的结束标识,而剩下的内容不知道怎么处理。为了解决这个问题,java使用转义序列,转义序列由反斜杠(\)后面加上一个字符或者一些数字组成。比如\t表示tab字符的转义符,而诸如\u03b1的转义符用于表示一个Unicode。一个转义蓄力被当作一个字符进行翻译。
所以,现在可以使用下面语句定义带引号的字符串
String message = "鲁迅曾经说过:\"老子没有说过\"";
反斜杠\被称之为转义字符。它是一个特殊字符,要显示这个字符,需要使用转义序列\\.
表示 | 含义 |
---|---|
\n |
换行符 |
\t |
横向制表符 |
\\ |
反斜线 |
\' |
单引号 |
\" |
双引号 |
\r |
回车符 |
\b |
退格符 |
\f |
换页符 |
字符型数据与数值型数据间的转换
char型数据可以转换成任意一种数值类型,反之亦然。将整数转成char型数据时,只用到该数据的低16位,其余部分被忽略。
字符的比较和测试
两个字符可以使用关系操作符进行比较,如同比较两个数字一样。因为时通过比较两个字符的Unicode值实现的。为了方便,Java的Character类提供了下列方法用于进行字符测试。
isDigit(ch):指定字符ch是否是一个数字。
isLetter(ch):指定字符ch是否是一个字母。
isLetterOrDigit(ch):指定字符ch是否是一个字母或者数字
isLowerCase(ch):指定字符ch是否是一个小写字母
isUpperCase(ch):指定字符ch是否是一个大写字母
toLowerCase(ch):返回ch的小写形式
toUpperCase(ch):返回ch的大写形式
String类型
char只能表示一个字符。为了表示一串字符,使用String的数据类型。例如:
String message = "welcome to java!";
String类型不是基本数据类型,而是引用类型。这里message是一个引用变量,它引用一个内容为welcome to java!的字符串对象。
字符串的常见操作
public int length():获取字符串当中含有的字符个数,返回字符串长度。 public String concat(String str):将当前字符串和参数字符串str连接,返回值新的字符串。 public char charAt(int index):获取指定索引位置的单个字符。(索引从0开始。) public String toUpperCase():返回所有字母大写的新字符串 public String toLowerCase():返回所有字母小写的新字符串 public String trim(): 返回去掉两边空白字符的新字符串。 //字符串比较 public boolean equals(String str):如果该字符串等于字符串str,返回true public boolean equalsIgnoreCase(String str):如果该字符串等于字符串str,返回true.不区分大小写 public int compareTo(String str):返回一个大于0、等于0、小于0的整数,表明一个字符串是否大于、等于或者小于str public int compareToIgnoreCase(String str):返回一个大于0、等于0、小于0的整数,表明一个字符串是否大于、等于或者小于str。不区分大小写 public boolean startsWith(String prefix): 返回字符串是否以前缀prefix开头 public boolean endsWith(String suffix): 返回字符串是否以后缀suffix结束 public boolean contains(String str): 检查字符串中是否包含子串str //字符串截取 public String substring(int begin):截取字符串,从特定位置begin的字符开始到字符串结尾。 public String substring(int begin,int end):截取字符串,从特定位置begin的字符开始到end-1的字符。(长度为end - begin) //字符串查找,提供了几个版本的indexOf和lastIndexOf方法 public int indexOf(String str):查找参数字符串在本字符串当中首次出现str的索引位置,如果没有返回-1值。 public int indexOf(String str,int fromIndex):查找参数字符串在本字符串当中fromIndex之后首次出现str的索引位置,如果没有返回-1值。 public int lastIndexOf(String str):查找参数字符串在本字符串当中最后一个出现str的索引位置,如果没有返回-1值。 public int lastIndexOf(String str,int fromIndex):查找参数字符串在本字符串当中fromIndex之前出现最后一个str的索引位置,如果没有返回-1值。
字符串和数字间的转换
String numString = "100"; byte byteNumber = Byte.parseByte(numString); short shortNumber = Short.parseShort(numString); int intNumber = Integer.parseInt(numString); long longNumber = Long.parseLong(numString); float flaotNumber = Float.parseFloat(numString); double doubleNumber = Double.parseDouble(numString);
前提条件是字符串必须满足各数值型的要求。将数值型转为字符串非常简单,使用字符串拼接一个空串即可:
int number = 200; String srt = number + "";
格式化控制台输出
System.out.printf(format,item1,item2,...itemn);这里的format是指一个由子串和格式标识符构成的字符串。
格式标识符指定每个条目应该如何显示。条目可以是数值、字符、布尔值或者字符串。简单的格式标识符是以百分号%开头的转换码。
标识符 | 输出 | 举例 | 宽度和精度 | 输出 |
%b | 布尔值 | true或false | %6b | 6个字符宽度的boolean值,true在前面加两个空格,false在前面加一个空格 |
%c | 字符 | 'a' | %5c | 在输出的字符前加4个空格 |
%d | 十进制整数 | 200 | %5d | 5个字符宽度的整数。如果该数字位数小于5,在前面补空格,如果大于5位,自动增加宽度 |
%f | 浮点数 | 3.1415 | %10.2f | 宽度至少为10,小数位2位。整数位为7位(包括小数点) |
%e | 科学计数法的数 | 0.314e1 | %10.2e | 宽度至少为10,小数位2位和指数部分。 |
%s | 字符串 | "this is a pen" | %12s | 宽度至少为12,如果不够12位,在前面补空格,如果大于12位,自动增加宽度 |
示例:字符串反转
示例:将十六进制数转为十进制数