StringBuffer/StringBuilder类

本文详细介绍了StringBuffer类的特点和使用方法,包括其构造函数、默认容量、自动扩容机制以及各种操作方法,对比了StringBuffer与StringBuilder的异同。
如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer)。

StringBuffer 其实就是一个存储字符 的容器。

笔试题目:使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?
StringBuffer 底层是依赖了一个字符数组才能存储字符数据 的,该字符串数组默认 的初始容量是16, 如果字符数组的长度不够使用 死,自动增长1倍。

StringBuffer 是一个存储字符的容器 

容器的具备 的行为
String 
增加
append(boolean b)    可以添加任意类型 的数据到容器中
insert(int offset, boolean b)  指定插入的索引值,插入对应 的内容。 

删除
delete(int start, int end)  根据指定的开始与结束的索引值删除对应的内容。
deleteCharAt(int index)   根据指定 的索引值删除一个字符。
修改
replace(int start, int end, String str) 根据指定 的开始与结束索引值替代成指定的内容。
reverse()   翻转字符串缓冲类的内容。  abc--->cba
        setCharAt(int index, char ch)  把指定索引值的字符替换指定的字符。 
        substring(int start, int end)  根据指定的索引值截取子串。
ensureCapacity(int minimumCapacity)  指定StringBuffer内部的字符数组长度的。
查看
indexOf(String str, int fromIndex) 查找指定的字符串第一次出现的索引值,并且指定开始查找的位置。
lastIndexOf(String str) 返回在此字符串中最右边出现的指定子字符串的索引。
capacity() 查看当前字符数组的长度。 
length() 
charAt(int index) 
toString()   把字符串缓冲类的内容转成字符串返回。

StringBuffer 与 StringBuilder的相同处与不同处:
相同点:
1. 两个类都是字符串缓冲类。
2. 两个类的方法都是一致的。
不同点:
1. StringBuffer是线程安全的,操作效率低 ,StringBuilder是线程非安全的,操作效率高。
2. StringBuffer是jdk1.0出现 的,StringBuilder 是jdk1.5的时候出现的。
推荐使用: StringBuilder,因为操作效率高。
  1. package com.cn.string;
  2. /*
  3. * 字符串特点:字符串是常量,它们的值在创建之后不能修改。
  4. * 字符串的内容一旦发生了变化,那么马上就会创建一个新的对象。
  5. * 注意:字符串的内容不适宜频繁修改,因为一旦修改马上就会创建一个新的对象。
  6. * 如果如要频繁修改字符串的内容,,建议使用字符串缓冲类(StringBuffer)。
  7. */
  8. public class stringBuffer {
  9. public static void main(String[] args){
  10. String str = "hello";
  11. String str2 =str + " word";
  12. System.out.println(str);
  13. str += " hh";
  14. System.out.println(str);
  15. System.out.println(str == str2);
  16. StringBuilder sb = new StringBuilder();
  17. sb.append("123456789123456789123456789123456789123456789");
  18. sb.append("刘志勇" + 2);
  19. System.out.println(sb.length());
  20. System.out.println(sb.capacity());
  21. sb.append(true);
  22. sb.append(3.14F);
  23. sb.insert(2, true);
  24. sb.delete(2, 6);
  25. sb.deleteCharAt(1);
  26. sb.replace(1, 4, "000000");
  27. System.out.println(sb);
  28. sb.reverse();
  29. System.out.println(sb);
  30. System.out.println(sb.length());
  31. sb.reverse();
  32. System.out.println(sb.indexOf("true"));
  33. System.out.println(sb);
  34. sb.replace(1, 7, "2345");
  35. System.out.println(sb);
  36. System.out.println(sb.indexOf("9", 9));
  37. sb.delete(9, sb.length());
  38. System.out.println(sb);
  39. sb.ensureCapacity(16);
  40. sb.append("1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
  41. System.out.println(sb.capacity());
  42. System.out.println(sb.append("刘志勇志志志志志"));
  43. System.out.println(sb.indexOf("志",0));
  44. }
  45. }
一、数据采集层:多源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 多设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 640×480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本多样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性校验:采集时通过OpenCV的Haar级联分器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值