(六)数学函数、字符和字符串
一、数学函数
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
)表示向左对齐
- 数据类型与格式化标识符要严格对应