您的位置:首页 > 产品设计 > UI/UE

StringBuffer、StringBuilder和BigDecimal

2016-07-16 22:25 369 查看
在这次课前,我们展开了一次深刻的关于一个概率问题的讨论,发现实现这个问题的程序比较复杂,不过我会尽量写出来,然后我们讲课,主要有两个内容:StringBuffer和StringBuilder类以及BigDecimal类。

一、StringBuffer和StringBuilder类

StringBuffer和StringBuilder两个类里面的方法基本相同,主要区别就是在于线程安全性和效率问题。前者安全,后者效率高。在两个类里面,有多种种方法,如:

append(为对象添加内容)

deleteCharAt(删除字符第几个字符或者删除一段字符,字符的位置与数组的标号类似)

insert(在指定位置插入内容,后面的内容往后移)

reverse(翻转字符)

CharAt(找出指定位置的字符)

codePointAt(返回指定位置字符的Unicode编码)

indexOf(返回指定字符第一次出现的位置)

二、BigDecimal类

BigDecimal类主要解决float和double型数计算时精度丢失问题,这个可能对我之前的概率问题有很大帮助。有关于加、乘、减、除等方法进行运算。

add(相加)

subtract(相减)

multiply(相乘)

divide(相除)

作业1:

package homework6;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ChineseSelection {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入查询字符");
String result=sc.next();
int count = 0;
String ChineseUnicode = "[\u4e00-\u9fa5]";
Pattern p = Pattern.compile(ChineseUnicode);
Matcher m = p.matcher(result);
while (m.find()) {
count++;
}
System.out.println("汉字出现的频率:" + count);
}
}
在这里,我们可以从控制台输入需要查询的字符,ChineseUnicode是中文字符的Unicode码,把它传进Pattern对象里面,然后再在输入的字符里面进行匹配,最后统计出总中文字数。

作业2:

import java.math.BigDecimal;

public class ArithUtils {
/*用于两个double型小数相加*/
public double add(double a,double b){
BigDecimal db1=BigDecimal.valueOf(a);
BigDecimal db2=BigDecimal.valueOf(b);
BigDecimal db3=db1.add(db2);
return db3.doubleValue();
}
/*用于两个double型小数相减*/
public double subtract(double a,double b){
BigDecimal db1=BigDecimal.valueOf(a);
BigDecimal db2=BigDecimal.valueOf(b);
BigDecimal db3=db1.subtract(db2);
return db3.doubleValue();
}
/*用于两个double型小数相乘*/
public double multiply(double a,double b){
BigDecimal db1=BigDecimal.valueOf(a);
BigDecimal db2=BigDecimal.valueOf(b);
BigDecimal db3=db1.multiply(db2);
return db3.doubleValue();
}
/*用于两个double型小数相除,并确定精度*/
public double divide(double a,double b,int i){
BigDecimal db1=BigDecimal.valueOf(a);
BigDecimal db2=BigDecimal.valueOf(b);
BigDecimal db3=db1.divide(db2,i,BigDecimal.ROUND_HALF_EVEN);
return db3.doubleValue();
}
}



特别的,在对两个double型小数进行运算时,如果出现相除不尽的情况,则将结果确定精度之后装换成BigDecimal型,再用方法转换回double型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: