Java中的Math类和String、StringBuffer、StringBuilder类
1、Math类
(1)java.lang.Math类提供了一些基本数学运算和几何运算的方法;
(2)此类中的所有方法都是静态的。这个类是final类,因此没有子类;
(3)Math类常见方法如下:
1)static double abs(double a):返回double值的绝对值。例如,Math.abs(-3.5)返回3.5;
2)static double max(double a,double b):返回两个double值中较大的一个。例如,Math.max(2.5,90.5);返回90.5;
3)static double random():返回一个随机的double值,该值大于等于0.0且小于1.0。
(4)随机获取一个[num1,num2)之间的整数(num2>num1)公式:
int num = (int)(Math.random()*(num2-num1)+num1);
Math类相关代码如下所示:
public class MathTest {
public static void main(String[] args) {
//Math类中的两个静态常量值
System.out.println(Math.E);
System.out.println(Math.PI);
//Math类中常用的方法
System.out.println(Math.abs(10));//10
System.out.println(Math.abs(-10));//10
//近似数相关方法
//ceil(double a):返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。
System.out.println(Math.ceil(3.3));//4.0
System.out.println(Math.ceil(3.5));//4.0
System.out.println(Math.ceil(3.9));//4.0
//floor(double a)返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
System.out.println(Math.floor(3.1));//3.0
System.out.println(Math.floor(3.5));//3.0
System.out.println(Math.floor(3.9));//3.0
//round(double a)返回最接近参数的 long。
System.out.println(Math.round(9.1));//9
System.out.println(Math.round(9.4));//9
System.out.println(Math.round(9.5));//10
System.out.println(Math.round(9.6));//10
System.out.println(Math.round(9.9));//10
//pow(double a, double b) 返回第一个参数的第二个参数次幂的值。
System.out.println(Math.pow(3,4));
//sqrt(double a) 返回正确舍入的 double 值的正平方根。
System.out.println(Math.sqrt(4));//2.0
//random() 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。
System.out.println(Math.random());
//随机获取一个[0,10)之间随机整数
int num =(int)(Math.random()*10);
System.out.println(num);
//总结:随机获取一个[nunm1,numn2)之间的整数(num2>num1):(int)(Math.random()*(num2-num1)+num1)
//求最大值和最小值
System.out.println(Math.max(25,10));
System.out.println(Math.min(25,10));
}
}
2、 String类概述
(1)在Java中,字符串被作为String类型的对象来处理。
(2)String类位于java.lang包中,默认情况下,该包被自动导入所有的程序。
(3)创建String对象的方法如下代码所示
String s = "Hello World";
String s = new String("Hello World");
(4)String类提供了许多有用的方法来操作字符串,比如获取字符串长度、对两个字符串进行比较、连接两个字符串以及提取一个字符串中的某一部分。
(5)字符串是一个字符序列,每一个字符都有自己的位置,字符串事实上也是一个字符数组,因此它的索引位置从0开始到(字符串长度-1)结束。
3、String类常用方法
(1)求字符串长度:length();
(2)字符串比较:equals(字符串2);
(3)忽略带小写的字符串比较:equalsIgnoreCase(字符串2);
(4)转换字符串中的英文字符为小写:toLowerCase();
(5)转换字符串中的英文字符为大写:toUpperCase();
(6)字符串的连接:concat(字符串2);
(7)字符串拆分:split(separator,limit);其中separator是可选项,表示根据匹配指定的正则表达式来拆分此字符串;如果匹配不上,则结果数组只有一个元素,即此字符串;limit可选项,该值用来限制返回数组中的元素个数。
关于String类的相关代码如下:
public class StringTest {
public static void main(String[] args) {
String str1 = new String("sdfhsdfhsdkjhfskdjhfhwuehfzskdjhfksjdhf");
//length():获取字符串的长度,字符串中字符的下标从0开始,所以最后一个字符的下标是字符串长度-1
//数组长度获取:数组名.length; 集合长度获取:集合名.size() 字符串长度获取:字符串对象名.length()
int length = str1.length();
System.out.println("str1字符串长度:"+length);
//equals():比较两个字符串的内容是否相同,这个equals()方法是String类重写了Object类中的equals()方法
boolean result = str1.equals("sdfhsdfhsdkjhfskdjhfhwuehfzskdjhfksjdhf");
System.out.println("两个字符串内容相同:"+result);
System.out.println("----------------------------------------");
//将字符串转换为大写或者小写
String str2 = "abc";
String str3 = "QWERT";
System.out.println("str2:"+str2);
System.out.println("str3:"+str3);
//将字符串str2转换为大写
String newStr2 = str2.toUpperCase();
//将字符串str3转换为小写
String newStr3 = str3.toLowerCase();
//输出转换后的两个字符串
System.out.println("newStr2:"+newStr2);
System.out.println("newStr3:"+newStr3);
}
}
4、使用StringBuffer类处理字符串
(1)StringBuffer类也是Java提供的用于处理字符串的一个类,而且它是比String类更高效的存储字符串的一种引用数据类型;
(2)StringBuffer类对字符串进行连接操作时,使用StringBuffer类可以大大提高程序的执行效率;
(3)如何使用StringBuffer类
StringBuffer类位于java.util包中,是String类的增强类。StringBuffer类提供了很多方法可供使用。
StringBuffer 对象名 = new StringBuffer("字符串内容");
(4)常用的StringBuffer类方法
1)toString()方法:将StringBuffer类型的字符串转换为String类型的对象;
2)append(参数)方法:将参数连接到字符串后,可以将任何类型的值追加到字符串后;
3)insert(位置,参数)方法:将参数插入到字符串指定位置后并返回。参数值可以是包括String的任何类型。
5、使用StringBuilder类处理字符串
(1)java.lang.StringBuilder是JDK 5.0版本新增的类,它是一个可变的字符序列;
(2)此类提供一个与StringBuffer类兼容的API,被设计用作StringBuffer类的一个简易替换,在大多数实现中,它比StringBuffer执行要快;
(3)使用StringBuilder类处理字符串的方法与StringBuffer类基本一样。
StringBuilder类相关代码如下:
public class StringBufferTest{
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer("qwertyuiop");
System.out.println("sb1:"+sb1);
StringBuffer sb2 = sb1.append("asdfg");
System.out.println("sb1:"+sb1);
System.out.println("sb2:"+sb2);
sb1.append(true);
sb1.append(100);
char[] chs = {'b','m','q'};
sb1.append(chs);
System.out.println("sb1:"+sb1);
//int capacity()返回当前容量。
int capacity = sb1.capacity();
System.out.println("当前容量:"+capacity);
//StringBuffer delete(int start, int end) 移除此序列的子字符串中的字符。包含开始索引不包含结束索引
sb1.delete(3,6);
System.out.println("sb1:"+sb1);
// StringBuffer insert(int offset, String str)将字符串插入此字符序列中。
sb1.insert(3,"hello");
System.out.println("sb1:"+sb1);
//StringBuffer reverse() 将此字符序列用其反转形式取代。
sb1.reverse();
System.out.println("sb1:"+sb1);
//String toString()返回此序列中数据的字符串表示形式。
String string = sb1.toString();
System.out.println(string);
}
}
6、String类、StringBuffer类及StringBuilder类对比
String、StringBuffer、StringBuilder这3个类在处理字符串时有各自的特点和实用场合,具体如下:
(1)String:字符串常量
String是不可变的对象,在每次对String类型进行改变时其实都等同于生成了一个新的String对象,然后指向新的String对象,所以经常改变内容的字符串最好不要用String类型,因为每次生成对象都会对系统性能产生影响。
(2)StringBuffer:字符串变量
StringBuffer是可变的字符串,在每次对StringBuffer对象进行改变时,会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以,在字符串对象经常改变的情况下,推荐使用StringBuffer类。
(3)StringBuilder:字符串变量
JDK 5.0版本以后提供了StringBuilder类,它和StringBuffer类等价,区别在于StringBuffer类是线程安全的,StringBuilder类是单线程的,不提供同步,理论上效率更高。