第四章:数学函数、字符、字符串
一.常用的数学函数
1.三角函数
方法 | 描述 |
---|---|
sin(radians) | 弧度->正弦函数值 |
cos(radians) | 弧度->余弦函数值 |
tan(radians) | 弧度->正切函数值 |
toRadians(degree) | 角度->弧度 |
toDegrees(radians) | 弧度->角度 |
asin(a) | 数值->反正弦函数值 |
acos(a) | 数值->反余弦函数值 |
atan(a) | 数值->反正切函数值 |
double sin=Math.sin(Math.PI/2);//1.0
//cos、tan同理
double radians = Math.toRadians(30);//0.5235987755982988
double degree=Math.toDegrees(Math.PI/4);//45.0
double radians=Math.asin(1.0);//1.5707963267948966
//acos、atan同理
2.指数函数
方法 | 描述 |
---|---|
log(x) | 以e为底的对数 |
exp(x) | e的x次方 |
log10(x) | 以10为底的对数 |
pow(a,b) | a的b次方 |
sqrt(x) | x的平方根(x>=0) |
double x = Math.log(Math.pow(Math.E, 2));//2.0 其中Math.E为e
double y=Math.exp(2);//7.38905609893065
double z=Math.log10(1000);//3.0
double s=Math.sqrt(4);//2.0
二.服务方法
1.取整方法
方法 | 描述 |
---|---|
ceil(x) | 向上取整 |
floor(x) | 向下取整 |
rint(x) | x取整为它最接近的整数,如果x与两个整数的距离相等,偶数的整数作为一个双精度值返回 |
round(x) | 如果x是单精度数,返回(int)(Math.floor(x+0.5);如果x是双精度,返回(long)(Math.floor(x+0.5) |
Math.ceil(3.1);//4.0
Math.ceil(-3.1);//-3.0
Math.floor(3.9);//3.0
Math.floor(-3.1);//-4.0
Math.rint(3.1);//3.0
Math.rint(3.5);//4.0
Math.rint(2.5);//2.0
Math.rint(-2.5);//-2.0
Math.rint(-3.5);//-3.0
Math.round(-2.6)//-3 long型
Math.round(2.4)//2 long型
Math.round(2.4f)//2 int型
Math.round(-2.4f)//-2 int型
[个人总结]
- ceil和floor方法可以想象成一个一维坐标轴
- 使用rint方法时,当x与两个整数距离相等时,奇数进位,偶数不进位,负数一样。
- 使用round方法时,单精度返回int型,双精度返回long型,都是加0.5,然后向下取整。
2.min、max、abs方法
服务数据类型:int,long,float,double
返回最小值、最大值、绝对值
3.random方法
random方法在上一章中有讲解,在此不做过多赘述。
三.字符数据类型和操作
1.Unicode码
- 16位,两个字节
- \u开头的4位16进制数表示
- 范围:\u0000-\uFFFF
字符 | 十进制 | Unicode |
---|---|---|
‘0’-‘9’ | 48-57 | \u0030-\u0039 |
‘A’-‘Z’ | 65-90 | \u0041-\u005A |
‘a’-‘z’ | 97-122 | \u0061-\u007A |
2.自增和自减可以用在char字符上
char ch='b';
++ch;//'c'
char ch2='b';
--ch2;//'a'
int x=ch-ch2;//2
3.常用转换
- 浮点型->char型
char ch=(char)65.9;//'A'
//转换过程:先将65.9转换为int型:65,在转换为char型'A'
- 0-FFFF的任何一个十六进制数可以隐式转换为char型,不在此范围需显示转换
char ch=0x0041;//'A'
- 如果另一个操作符是字符或数字,则自动转换为数字,若为字符串则相连
int i='2'+'3';
System.out.println("i is "+i);//i is 101
4.特殊字符的转义序列
- \b:退格键
- \f:换页符
- \r:回车键
5.字符常用方法
由于Character类中方法为静态方法,故无需创建实例调用,静态方法建议直接用类名调用。
Character.isDigit('5');//true 是否为数字
Character.isLetter('5');//false 是否为字母
isLetterOrDigit(ch);// 数字或字母
isLowerCase(ch);// 小写字母
isUpperCase(ch);// 大写字母
toLowerCase('A');//'a' 转为小写
toUpperCase('a');//'A'
【补充 2002301】
一个字符占几个字节
可以通过 字符串.getBytes(编码格式).length 来获取
String china = "中";
byte[] bytes = china.getBytes(StandardCharsets.UTF_8);
System.out.println(bytes.length);
四.String类型
1.String 类型不是基本数据类型,是引用类型
String message="Java Is Fun";
//message引用了一个内容为Java Is Fun的字符串对象
由于String中的方法只能有一个特定的字符串实例来调用,故又称为实例方法,非实例方法称为静态方法。
2.String 对象的简单方法
String str="welcome";
str.length();//7 字符串长度
str.charAt(3);//c 返回指定下标的字符,下标从0开始
str.concat("hello")//welcomehello 连接字符串,也可以使用+连接
str.toUppercase();//WELCOME 返回全大写
str.toLowerCase();//welcome 返回全小写
String str2="welcome to ".trim();
System.out.println(str.length());//10 去掉两边空格
[注意] java允许在不创建新变量的情况下,使用字符串直接量引用字符串。
"Welcome to java".length();//15
"".length()//0
3.从控制台读取字符串
[注意] next()方法和nextLine()方法的区别在于next()方法以空白结束(‘ ’、‘\t’、‘\f’、‘\r’、‘\n’);nextLine()方法读取一整行文本,以回车键为结束标志。
从控制台获取字符没有专门的方法,只能通过如下方法:
String x=in.nextLine();//读取一条字符串
char ch=x.charAt(0);//取第一个字符
4.String对象的比较方法
String str="welcome";
String str2="welcome";
String str3="hello";
str.equals(str2);//true 字符串内容是否相等,==比较的是是否指向同一个对象
str.equalsIgnoreCase(str2);//true 不区分大小写比较
str.compareTo(str3);//15 比较第一个不相同的字母,返回一个大于0,=0,<0的整数,此例中w比h大15,所以返回正15
str.compareToIgnoreCase(str2);//15 比较不区分大小写,比较规则与上例中相同
str.startsWith("wo");//false 是否以wo开头
str.endsWith("me");//true 是否以me结尾
str.contains(str2);//true 是否包含str2子串
5.获得子字符串
String str="welcome to java";
str.substring(3);//come to java 从开始下标到结束
str.substring(3,6);//com 从开始下标到结束下标-1,注意:不包含结束下标
str.indexOf('c');//3 返回字符或字符串下标
str.indexOf('a',4)//12 从下标4之后第一个出现的字符或字符串
str.lastIndexOf('a');//14 最后一个出现的字符或字符串下标
str.lastIndexOf('a',13);//12 从下标13之前出现的最后一个'a'
[注意] indexOf(str,fromindex)中从fromindex之后查找
lastIndexOf(str,fromindex)中从fromindex之前查找
6.字符串与数字间的转换
String str="123";
int x=Integer.parseInt(str);//123 转为int类型
double y=Double.parseDouble(str);//123 转为double型
……
String str2=123+"welcome";//123welcome
【补充 20220217】
1.replace和replaceAll的区别
replace可以整体替换字符和字符串
replaceAll可以根据正则规则进行替换
2.Pattern和Matcher比较正则
// 要验证的链接
String link = "www.baidu.xom";
// 链接正则表达式
String regEx = "www.*";
// 编译正则表达式 忽略大小写的方法:Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);
Pattern compile = Pattern.compile(regEx);
Matcher matcher = compile.matcher(link);
// 链接中是否有匹配的正则链接字符串
boolean b = matcher.find();
System.out.println(b);
五.格式化输出
1.语法:printf(formate,item1,item2……)
2.格式标识符
格式标识符 | 描述 |
---|---|
%b | 布尔值 |
%c | 字符 |
%d | 十进制 |
%f | 浮点数 |
%e | 标准科学计数法 |
%s | 字符串 |
System.out.printf("%5c",'c');// c c前有四个空格
System.out.printf("%6b",true);// true true前加两个空格
System.out.printf("%5.3f",3.1415926);//3.142 保留三位小数,并共占5位的空间
[注意]
- 如果一个条目需要比指定宽度更多的空间,宽度自动增加
- 默认情况下为右对齐,可添加负号实现左对齐
[补充]2020-04-26
在jdk1.8中String添加新方法:String.join()
语法:String.join(“分隔符”,“字符串数组/集合”)
//获取所有bean对象如下:
for(String beanObject:ac.getBeanDefinitionNames()){
//获取每个beanObject的别名
String[] beanName=ac.getAliases(beanObject);
//打印每个bean对象名称和他的别名 String.join()方法:将字符串数组用特定字符进行连接
//String.join("特定字符","字符串数组")
System.out.println(String.format("beanObject:%s,别名:[%s]",beanObject,String.join(",",beanName)));
//beanObject:helloWord,别名:[helloWorld_2,helloWord_1,he]
}
【补充 20220217】
作用:与指定字符串进行连接,返回新字符串
第二个参数可以传递字符串数组和实现Iterator接口的类
之所以可以传递字符串数组的原因是可以传可变参数的实现CharSequence接口的类,所以数组元素必须是实现了CharSequence接口的类
七.总结
通过第四章的学习,我学习到了常用的数学函数和服务方法,服务方法中的取整方法可能有点绕,小伙伴要多留意哦,我还学会了处理字符和字符串的方法,格式化输出对今后的练习非常有帮助,总之,收获很大,希望小伙伴也是!前四章为基础中的基础,下一章我们将接触到循环,基础中的入门,跟紧步伐!
加油!第五章待更……