(六)数学函数、字符和字符串

一、数学函数

Math类函数使用时无需导入,因为它在 Java.lang 包中,已经默认隐式导入。

1.1 三角函数

r 是弧度单位,d 是角度单位,a 是一定范围内的常数

方法 描述
Math.sin(r) 正弦
Math.cos(r) 余弦
Math.tan(r) 正切
Math.toRadians(d) 角度转弧度
Math.toDegrees(r) 弧度转角度
asin(a) 反三角正弦 [-Π/2,Π/2]
acos(a) 反三角余弦 [0, Π]
atan(a) 反三角正切 [-Π/2,Π/2]

1.2 指数函数

方法 描述
Math.pow(a, b) a^b^
Math.sqrt(x) √x
Math.log(x) ㏑x
Math.log10(x) log10(x)
Math.exp(x) e^x^

1.3 取整函数

方法 描述
Math.ceil(x) 向上取整最接近的整数,返回值为 double
Math.floor(x) 向下取整最接近的整数,返回值为 double
Math.rint(x) 取整最接近的整数。若距离相等则偶数的整数作为返回值,类型最后为 double
Math.round(x) 若x为float,则返回(int)Math.floor(x+0.5);若为double则返回(double)Math.floor(x+0.5)

1.4 比较函数

a,b为int,long,float,double

方法 描述
Math.min(a,b) 返回最小值
Math.max(a, b) 返回最大值
Math.abs(x) 返回绝对值

二、字符类型和操作

字符直接量被单引号括起来,字符串被双引号括起来。

2.1 Unicode 和 ASCII码

将字符映射到它的二进制形式的过程称为编码。

一个16位Unicode码占两个字节,以 \u 表示的4位十六进制表示,范围从 \u0000\uffff

大多数计算机采用 ASCII码(美国标准信息交换码),它是表示所有大小写字母、数字、标点符号和控制字符的8位编码表。

对于 char 型数据,也可以用对应 ASCII 码或 Unicode 码来表示。

// 以下3条语句等价
char a = 'A';
char a = '\u0041';
char a = 65;

2.2 转义字符

在输出一些特殊的字符比如''""\等可用转移符反斜杠 \接字符的形式组成转移字符。

转移符号 意义
\" "
\' '
\\ \
\n 换行符
\t Tab制表
\r 回车符
\b 退格符

2.3 字符型数据与其他数据的转换

char 型数据可以转换成任意一种数值类型。浮点数转换成 char 型时需要先转为 int 型。

所有数值操作符都可以用在 char 型数据上。`char 型与数值型则 char 型转换为数值型,与 String 型则与字符串相连。

2.4 字符的比较和测试

两个字符可以根据其 Unicode 值通过关系操作符进行比较。

字符 十进制
'A' ~ 'Z' 65 ~ 90
'a' ~ 'z' 97 ~ 122
'0' ~ '9' 48 ~ 57

使用 Java.lang 包中的 Charactor 类提供的方法进行字符测试

方法 描述
Charactor.isDigit(c) 若c为数字字符,返回true
Charactor.isLetter(c) 若c为字母字符,返回true
Charactor.isDigitOrLetter(c) 若c为数字或字母字符,返回true
Charactor.isLowerCase(c) 若c为小写字母字符,返回true
Charactor.isUpperCase(c) 若c为大写字母字符,返回true
Charactor.toLowerCase(c) 返回c的小写形式
Charactor.toUpperCase(c) 返回c的大写形式

三、字符串及其操作

3.1 字符串

字符串是用双引号包裹起来的一串字符序列,属于引用数据类型。

3.2 实例方法与静态方法

只能通过从一个具体实例来调用的方法叫做 实例方法 ,有的有参数有的无。例如String对象中的字符串处理方法。

调用实例方法的方式:`ref.methodName(args)` (参数可有可无,可一可多) 非实例化方法叫做 **静态方法**,例如 `Math` 类和 `Charactor` 类中的方法。 调用静态方法的方式:`className.methodName(args)` 3.3 String对象中的方法 > str为实例的字符串,`index` 为字符串索引 | 实例方法 | 描述 | | ------------------- | ------------------------------ | | `str.length()` | 返回字符串长度 | | `str.charAt(index)` | 返回指定索引位置的字符 | | `str.concat(str1)` | 连接指定字符 | | `str.toUpperCase()` | 返回一个全部大写的新字符串 | | `str.toLowerCase()` | 返回一个全部小写的新字符串 | | `str.trim()` | 返回一个去掉两边空白的新字符串 | 3.3.1求字符串长度 ```Java String str = "message"; int l = str.length(); // l == 7 ``` 3.3.2 从字符串中获取字符 > 确保不越界:`index <= str.length() - 1` ```Java String str = "message"; char ch = str.charAt(1); // ch == 'e' ``` 3.3.3 连接字符串 + 使用 `str.concat(s1)` 连接 + 使用 `+` 连接 + 使用 `+` 可连接数值类型和 `String` 类型 3.3.4 字符串的转换 `str.toUpperCase()` 将字符串全部转换为大写,`str.toLowerCase()` 将字符串全部转换为小写; `str.trim()` 清除字符串两端的空白字符 空白字符:`' '`,`\n`, `\t`, `\r`, `\b` 3.3.4从键盘读取字符串 + 使用`Scanner` 对象的 `next()` 方法读取以空白字符结束的字符串: ```Java import Java.util.Scanner; Scanner input = new Scanner(System.in); String str = input.next(); ``` + 使用 `nextLine()` 读取以回车键为结束的字符串,即读取一整行内容: ```Java import Java.util.Scanner; Scanner input = new Scanner(System.in); String str = input.nextLine(); ``` 3.4 字符串的比较 > str, str1为字符串 | 方法 | 描述 | | ------------------------------- | ------------------------------------------------------------ | | `str.equals(str1)` | 若相等,返回`true` | | `str.equalsIgnoreCase(str1)` | 若相等,返回`true`,不区分大小写 | | `str.compareTo(str1)` | 返回大于0、等于0、小于0的整数,代表str是否大于、等于、小于str1 | | `str.compareToIgnoreCase(str1)` | 同上,且不区分大小写 | | `str.startsWith(prefix)` | 若str以特定前缀`prefix` 开始,返回`true` | | `str.endsWith(suffix)` | 若str以特定前缀`prefix` 开始,返回`true` | | `str.contains(s1)` | 若str1是str的子字符串,返回`true` | 3.4.1 比较字符串是否相等 > `==` 只能比较 str 与 str1 是否指向同一个对象,不能比较内容。 + 使用 `str.equals(str1)` 判断两字符串是否相等,相等返回 `true`,否则 `false` + `str.compareTo(str1)` 也可判断,若返回0则相等 3.4.2 字符串比较大小 `compareTo()`、`compareToIgnoreCase()` 比较的返回值实际是字符串按照从前到后的顺序对应字符的 `Unicode` 值之差。 ```Java String str = "abcd"; String str1 = "abcm"; int diff = str.compareTo(str1); // diff == -9,str < str1 ``` 3.5 获得子字符串 + 提取字符串中某个指定字符串:`str.charAt(index)` + 获得子串 | 方法 | 描述 | | ------------------------------------- | ------------------------------------------------------- | | `str.substring(startIndex)` | 返回从`startIndex`到字符串结尾。 | | `str.substring(startIndex, endIndex)` | 返回从`startIndex`到`endIndex - 1` 位置,范围前闭后开。 | + 寻找指定字符串 > 实参 `ch` 可以是字符串 `str` | 方法 | 描述 | | -------------------------------- | ------------------------------------------------------------ | | `str.indexOf(ch)` | 返回str中出现的第一个ch的索引;若无则返回`-1` | | `str.indexOf(ch, fromIndex)` | 返回在fromIndex之后(包括fromindex) 出现的第一个ch的索引;若无返回`-1` | | `str.lastIndexOf(ch)` | 返回str中最后一次出现的ch的索引;若无返回`-1` | | `str.lastIndexOf(ch, fromIndex)` | 返回fromIndex之前最后一次出现的ch的索引;若无返回`-1` | 3.6 字符串与数字的互转 + 数值型字符串转数字 ```Java //Integer类和Double类都包含在java.lang包中 int intValue = Integer.parsInt(intStirng); double doubleValue = Double.parseDouble(doubleString); ``` + 数值转字符串 ```Java int number = 12345; String s = number + ""; ``` ### 四、格式化控制台输出 使用 `System.out.printf()` 进行格式化输出 4.1 公式:`%m.nf` + m:域宽度 + n:精度 + f:转换码(格式标识符) 4.2 语法:`System.out.printf(format, item1, item2, ... , itemk)` >format 是由子串和格式化标识符构成的字符串 ```Java int i = 20; double d = 123.4567; System.out.printf("i is %d, d is %f", i, d); // i is 20, d is 123.456700 ``` 4.3 常用格式化标识符 | 标识符 | 输出 | 举例 | | ------ | -------------- | ------------------------------------------------------------ | | `%b` | 布尔值 | `%6b` 表示在`true`前面有2个空格,在`false`前面有1个空格 | | `%c` | 字符 | `%4c` 表示在字符前面加3个空格 | | `%d` | 十进制整数 | `%5d` :若整数宽度小于5,则在整数前面补充空格;若大于则整数增加宽度 | | `%e` | 标准科学技术法 | `%10.2e` : 浮点数部分宽度为12,包括小数点和前后的数字;是否补充空格同上 | | `%f` | 浮点数 | `%10.2f` : 包留小数点后2位,整数部分宽度为7位;是否补充空格同上 | | `%s` | 字符串 | `%10f`字符串条目宽度为10,若不够则自动增加宽度,若多余则补充空格 | 注意: + 若一个条目需要更多宽度,则自动增加宽度;若指定宽度有余,则补充空格; + 默认情况下,条目中的内容都是向右对齐的

在格式标识符前面加一个 - 号 ( -%10s)表示向左对齐

  • 数据类型与格式化标识符要严格对应