Day25
P25 String案例演示
需求:
- 已知String str = “this is a text”;
- 1.将str中的单词单独获取出来
- 2.将str中的text替换为practice
- 3.在text前面插入一个easy
- 4.将每个单词的首字母改为大写
package com.changyonglei.baozhuanglei.demo01;
/*
需求:
- 已知String str = "this is a text";
- 1.将str中的单词单独获取出来
- 2.将str中的text替换为practice
- 3.在text前面插入一个easy
- 4.将每个单词的首字母改为大写
*/
public class Demo4 {
public static void main(String[] args) {
String str="this is a text";
// 1.将str中的单词单独获取出来
String[] arr=str.split(" ");
for (String s:arr) {
System.out.println(s);
}
System.out.println("====================================");
// 2.将str中的text替换为practice
String str2=str.replace("text","practice");
System.out.println(str2);
System.out.println("==================================== ");
// 3.在text前面插入一个easy
String str3=str.replace("text","easy text");
System.out.println(str3);
System.out.println("=====================================");
// 4.将每个单词的首字母改为大写
for (int i=0;i<arr.length;i++){ //遍历出上面1.中的数组arr
char first=arr[i].charAt(0);//取出每个数组元素的首字母
char upperfirst=Character.toUpperCase(first);
//用char的包装类中的小写变大写方法把首字母变大写
String news=upperfirst+arr[i].substring(1);
//substring()方法是截取方法,substring(1)是从下标为1的
// 位置截取字符串剩余部分,此处是要得到单词首字母之外的部分
// 然后和变大写的首字母拼接到一起
System.out.println(news);
}
/* 输出:
this
is
a
text
====================================
this is a practice
====================================
this is a easy text
=====================================
This
Is
A
Text
*/
}
}
P26 StringBuffer和StringBuilder
可变字符串
- StringBuffer:可变长字符串,JDK1.0提供,运行效率慢 (但比String快),线程安全;(相当于增加String类功能的增强类,事先开辟一个缓冲区buffer,操作的话直接在缓冲区操作,这样效率比字符串String类 高,内存节省程度上也比String好,)
- StringBuilder:可变长字符串,JDK5.0提供,运行效率快,线程不安全;(与StringBuffer功能一样,唯一不同是 线程不安全 运行效率比StringBuffer快)
package com.changyonglei.baozhuanglei.demo01;
/*
StringBuffer和StringBuilder的使用
1、和String区别 (1)效率比String高 (2)比String节省内存
2、StringBuffer和StringBuilder常用的4个方法
(1).append()方法;追加 (在缓存区追加数据)
(2).insert();添加 可以在字符串任意位置添加数据
(3).replace() 跟String的replace方法不同的是 可以指定位置替换
(4).delete(); 删除 删除第*位到第*位(包头不包尾)
*/
public class Demo5 {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
//写StringBuilder sb=new StringBuilder();也可以,他俩功能一样
//1.append()方法;追加 (在缓存区追加数据)
sb.append("java世界第3");
System.out.println(sb.toString());
//输出:java世界第3
//toString()方法,把sb变成String字符串类型输出
sb.append("java真相");
System.out.println(sb.toString());
//输出:java世界第3java真相
sb.append("java不戳");
System.out.println(sb.toString());
//输出:java世界第3java真相java不戳
System.out.println("===========================");
//2.insert();添加 可以在字符串任意位置添加数据
sb.insert(0,"我在最钱面");//在字符串下标0位置添加
System.out.println(sb.toString());
//输出:我在最钱面java世界第3java真相java不戳
System.out.println("===========================");
//3.replace() 跟String的replace方法不同的是 可以指定位置替换
sb.replace(0,5,"hello");
//表示字符串第0位到第4位(共5个字符,包头不包尾 不含第五位字符)
//被“hello”这5个字符替换
System.out.println(sb.toString());
//输出:hellojava世界第3java真相java不戳
System.out.println("===========================");
//4.delete(); 删除 删除第*位到第*位(包头不包尾)
sb.delete(0,5);//删除第0、1、2、3、4这五位字符
System.out.println(sb.toString());
//输出:java世界第3java真相java不戳
//清空
sb.delete(0,sb.length());//删除所有字符
System.out.println(sb.length());//输出:0
System.out.println(sb.toString());
//输出:空的 没有东西 什么都不输出
}
}
package com.changyonglei.baozhuanglei.demo01;
/**
* 验证StringBuilder效率高于String
*/
public class Demo6 {
public static void main(String[] args) {
//开始时间
long start=System.currentTimeMillis();
// String string="";
// for (int i=0;i<99999;i++){
// string+=i;
// }
// System.out.println(string);
StringBuilder sb=new StringBuilder();
for (int i=0;i<99999;i++){
sb.append(i);
}
long end=System.currentTimeMillis();
System.out.println("用时:"+(end-start));
}
//String 用时:17027
//StringBuilder 用时:8
}
P27 BigDecimal的使用
//上面图片上的思考题
package com.changyonglei.baozhuanglei.demo01;
public class Demo7 {
public static void main(String[] args) {
double d1=1.0;
double d2=0.9;
System.out.println(d1-d2);//输出0.09999999999999998
//面试题
double result=(1.4-0.5)/0.9;
System.out.println(result);//输出0.9999999999999999
//问题:为什么d1-d2不是0.1 ?
// 为什么(1.4-0.5)/0.9 不是1 ?
/* 答:因为double和float类型的储存方式是近似值储存方式,也就
是说我们存的是1.0 但是实际上在内存里可能并不是1.0 而是
0.999999999,而有些我们看到是0.9但存的可能是0.89999,
所以说存的是近似值,经过一些算术运算之后可能结果出现一些误
差,这个误差可能很小,如果在允许范围之内是没有问题的,但是
在一些行业他要求精度比较高,比如银行,在这种情况下用double
或者float类型的1.0-0.9出现0.0999999是不允许的,对精度
要求高的时候就要用BigDecimal类。
*/
}
}
package com.changyonglei.baozhuanglei.demo01;
import java.math.BigDecimal;
public class Demo7 {
public static void main(String[] args) {
double d1=1.0;
double d2=0.9;
System.out.println(d1-d2);//输出0.09999999999999998
//面试题
double result=(1.4-0.5)/0.9;
System.out.println(result);//输出0.9999999999999999
//问题:为什么d1-d2不是0.1 ?
// 为什么(1.4-0.5)/0.9 不是1 ?
/* 答:因为double和float类型的储存方式是近似值储存方式,也就
是说我们存的是1.0 但是实际上在内存里可能并不是1.0 而是
0.999999999,而有些我们看到是0.9但存的可能是0.89999,
所以说存的是近似值,经过一些算术运算之后可能结果出现一些误
差,这个误差可能很小,如果在允许范围之内是没有问题的,但是
在一些行业他要求精度比较高,比如银行,在这种情况下用double
或者float类型的1.0-0.9出现0.0999999是不允许的,对精度
要求高的时候就要用BigDecimal类。
*/
System.out.println("=========================");
//BigDecimal 大的浮点数精确计算
BigDecimal bd1=new BigDecimal("1.0");
//注意:最右边的BigDecimal()类型一定要用字符串String类型的
// BigDecimal(String val)类,因为字符串是最准确的
BigDecimal bd2=new BigDecimal("0.9");
//BigDecimal 减法
//类的运算的话就 不能直接用bd1-bd2了,我们用类的方法进行计算
BigDecimal r1=bd1.subtract(bd2);
System.out.println(r1);//输出0.1
//BigDecimal 加法
BigDecimal r2=bd1.add(bd2);
System.out.println(r2);//输出1.9
//BigDecimal 乘法
BigDecimal r3=bd1.multiply(bd2);
System.out.println(r3);//输出0.90
//BigDecimal 除法
BigDecimal r4 = new BigDecimal("1.4")
.subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9"));
System.out.println(r4);//输出1
//当除不尽时怎么办?
BigDecimal r5=new BigDecimal("10")
.divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);
//除不尽时在.divide( ,,)括号里面加上保留几位小数,用四
// 舍五入的方式保留小数,如上边.divide(new BigDecimal("3")后
// 边加了个,2表示保留2位小数,.divide(new BigDecimal("3"),2
// 后加了个,BigDecimal.ROUND_HALF_UP表示用四舍五入的方式保留
//小数
System.out.println(r5);//输出3.33
}
}