【学习笔记】String进阶:StringBuffer类(线程安全)和StringBuilder类
一、除了使用String类存储字符串之外,还可以使用StringBuffer类存储字符串。而且它是比String类更高效的存储字符串的一种引用数据类型。
优点:
对字符串进行连接操作时,使用StringBuffer类可以大大提高程序的执行效率。
1、如何使用StringBuffer类
StringBuffer类位于java.util包中,是String类的增强类。声明StringBuffer对象并初始化的方法如下:
StringBuffer sb = new StringBuffer(“青春无悔”);
2、常用的StringBuffer类方法
(1)、toString()方法
String str = sb.toString(); //转换成String类
(2)、append()方法
字符串.append(参数);
(3)、insert(位置,参数);
insert();方法可以实现将参数插入到字符串的指定位置。
案例:编写一个方法,实现将一个数字字符串转换成逗号分隔的数字串。
public class InsertDemo {
public static void main(String[] args) {
String nums = "123418447.6717";
StringBuffer words = new StringBuffer(nums);
//向字符串插入逗号
int index = words.length();
if (words.lastIndexOf(".")>0) {
index = words.lastIndexOf(".");
}
for (int i = index-3; i >0; i=i-3) {
words.insert(i, ',');
}
System.out.println(words);
}
}
分析:利用StringBuffer类的length()方法获取字符串的长度,使用for循环从后往前每隔三位插入逗号。
二、String类、StringBuilder类及StringBuffer类对比
1.String:字符串常量:不可变的对象,每次赋值等同于生成一个新的String对象。
2.StringBuffer:字符串变量:可变的字符串。
3.StringBuider:字符串变量:JDK1.5以后版本提供:单线程不同步。
三、StringBuffer类的应用:实现商品批发金额的显示
import java.util.Scanner; /**
* 实现商品批发总金额的显示
* @author Administrator
*
*/
public class Goods {
//创建数组存放商品名及对应的价格
String[] goods = new String[]{"电风扇","洗衣机","电视机","冰箱","空调机"};
double[] price = new double[]{124.23,4500,8800.90,5000.88,4456,12000.46}; //登陆验证
private boolean login(String name, String pwd) {
boolean flag = false;
if (name.equals("TOM")&&pwd.equals("123")) {
System.out.println("登陆成功!");
flag = true;
}else{
System.out.println("用户名和密码不匹配!");
}
return flag;
}
//打印商品信息
private void show() {
//1.使用Map集合保存 //2.使用一般方法打印
System.out.println("*************欢迎进入商品批发城*************");
System.out.println("\t编号\t商品\t价格");
for (int i = 0; i < goods.length; i++) {
System.out.println("\t"+(i+1)+"\t"+goods[i]+"\t"+price[i]);
}
System.out.println("****************************************");
} //计算订单总价
private double calc(int goodId, int sum) {
//根据商品编号查找商品信息
int index = goodId-1;
double sumPrice = -1;
if (index>=0&&index < goods.length) {
sumPrice = price[index]*sum;
} else {
System.out.println("您选择的商品不存在!");
}
return sumPrice;
} //格式化输出金额
private boolean change(int goodId, int sum) {
//调用calc()方法获取商品金额
double d = this.calc(goodId, sum);
boolean flag = false;//商品不存在
if (d==-1) {
return flag;
}
StringBuffer price = new StringBuffer(String.valueOf(d));
for (int i = price.indexOf(".")-3; i > 0; i = i-3) {
price.insert(i, ',');
}
System.out.println("您需要付款:"+price);
return flag = true;
} //测试
public static void main(String[] args) {
Goods g = new Goods();
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in);
boolean flag = false;
do {
/*用户登录*/
System.out.print("请输入用户名:");
String name = input.next();
System.out.print("请输入密码:");
String pwd = input.next();
flag = g.login(name, pwd);
} while (!flag);
//打印批发商品信息
g.show();
flag = false;
do {
//接收用户批发操作
System.out.print("请输入您批发的商品编号:");
int goodId = input.nextInt();
System.out.print("请输入批发数量:");
int sum = input.nextInt();
//输出货款总额
flag = g.change(goodId,sum);
} while (!flag); } }
【学习笔记】String进阶:StringBuffer类(线程安全)和StringBuilder类的更多相关文章
- Java学习笔记——String与StringBuffer
String与StringBuffer String.substring(start,end); 范围为[start,end) StringBuffer.delete(start,end) 范围也是为 ...
- Django学习笔记(进阶篇)
Django学习笔记(进阶篇):http://www.cnblogs.com/wupeiqi/articles/5246483.html
- Directx11学习笔记【二十一】 封装键盘鼠标响应类
原文:Directx11学习笔记[二十一] 封装键盘鼠标响应类 摘要: 本文由zhangbaochong原创,转载请注明出处:http://www.cnblogs.com/zhangbaochong/ ...
- Java笔记——String、StringBuffer和StringBuilder类
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符串序列是不可改变的,直至这个对象被销毁. StringBuffer对象则代表一个字符序列可变的字符串,当一个S ...
- Java学习笔记--String StringBuffer StringBuilder
String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...
- 学习笔记整理之StringBuffer与StringBulider的线程安全与线程不安全
关于线程和线程不安全: 概述 编辑 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码.如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就 ...
- [原创]java WEB学习笔记51:国际化 概述,API 之 locale类,dataFormat类,numberFormat类, MessageFormat类,ResourceBundle 类
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
主函数类MainDemo.java package com.itcast.test20140109; import java.util.ArrayList; import java.util.Coll ...
- Java学习之String、StringBuffer、StringBuilder
String 我们知道字符串的分配和其他对象分配一样,是需要消耗高昂的时间和空间的,而且字符串我们使用的非常多.JVM为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池 ...
- Java WebService学习笔记 - Axis进阶(二)
上一篇 Java WebService学习笔记 - Axis(一) 前一篇博文中简单介绍了Axis的使用方法,这篇将介绍一些Axis的一些高级特性 Axis中Handler的使用 Handler ...
随机推荐
- javascript立即执行函数与模块化
概念:立即执行函数顾名思义就是函数定义好之后立即执行.函数表达式方式:函数表达式后面加括号()即可立即执行函数. var xmlhttpUtil = function () { function ge ...
- CF914E Palindromes in a Tree
$ \color{#0066ff}{ 题目描述 }$ 给你一颗 n 个顶点的树(连通无环图).顶点从 1 到 n 编号,并且每个顶点对应一个在'a'到't'的字母. 树上的一条路径是回文是指至少有一个 ...
- 两种unix网络编程线程池的设计方法
unp27章节中的27.12中,我们的子线程是通过操作共享任务缓冲区,得到task的,也就是通过线程间共享的clifd[]数组,这个数组其实就是我们的任务数组,得到其中的connfd资源. 我们对这个 ...
- JS 为任意元素添加任意事件的兼容代码
为元素绑定事件(DOM):有两种 addEventListener 和 attachEvent: 相同点: 都可以为元素绑定事件 不同点: 1.方法名不一样 2.参数个数不一样addEventLi ...
- javascrip 中排序的函数怎么理解
其中s是数组[888,2222,9,4]:我不明白sort函数中参数是如何作用的,function中的a和b又是干什么的? 那个function的作用就是比较两个数的大小用的,然后返回结果的正负作为排 ...
- abp使用redis缓存
利用NuGet程序包管理程序,添加 Abp.RedisCache 在 xxxx.Web.Core 项目的Module中注册Redis 在刚才上面这个类文件头部注册Redis组件 在Web.config ...
- 【算法笔记】B1046 划拳
1046 划拳 (15 分) 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输 ...
- plsql11破解注册码
plsql11.0.6.1796-64bit的可以用注册码: Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number: passwo ...
- 不要重复发明轮子-C++STL
闫常友 著. 中国铁道出版社. 2013/5 标准的C++模板库,是算法和其他一些标准组件的集合. . 1.类模板简介 2.c++中的字符串 3.容器 4.c++中的算法 5.迭代器 6.STL 数值 ...
- C#工具类之XmlNode扩展类
using System; using System.Linq; using System.Xml; /// <summary> /// XmlNodeHelper /// </su ...