JAV API 之 --- StringBuffer类、Array类、基本类型包装类
JAVA API 之 — StringBuffer类、Array类、基本类型包装类
StringBuffer类:
概念引入:
前面我们对字符串进行操作,一旦定义字符串之后,其长度是不可变的,如果对字符串进行拼接操作,采用+号大量拼串,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。
Java为字符拼接的操作方便,提供了一个类:
Class StringBuffer
。Class StringBuffer
:一个线程安全的,可变字符序列。一个字符串缓冲区就像一String
,但是可以修改。在任何一个时间点,它包含一些特定的字符序列,但该序列的长度和内容可以通过某些方法调用。他是一个长度可变的字符容器,可以存储多个字符,可以不断的往容器中追加内容。
StringBuffer的构造方法:
public StringBuffer()
: 无参构造,构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。public StringBuffer(int capacity)
: 指定容量的字符串缓冲区对象
public StringBuffer(String str)
: 指定字符串内容的字符串缓冲区对象StringBuffer的方法:
public int capacity()
:返回当前容量。理论值
public int length()
:返回长度(字符数)。 实际值案例演示:
StringBuffer构造方法和长度方法的使用。
public class MyTest {public static void main(String[] args) { //创建一个字符容器StringBuffer sb = new StringBuffer();//获取字符容器的容量,其初始容量为 16 个字符。int capacity = sb.capacity();System.out.println(capacity); //16//获取长度int length = sb.length();System.out.println(length); //0System.out.println("----------------------------");//容量 和 长度// 往容器中追加内容StringBuffer sb2 = sb.append(100); //往容器中追加了一个int类型的数据capacity = sb.capacity();System.out.println(capacity); //16//获取长度length = sb.length();System.out.println(length); //3sb2.append("abdefafdasfasdfasdfasdfasdfwfsefesfesfd");capacity = sb.capacity();System.out.println(capacity); //42//获取长度length = sb.length();System.out.println(length); //42} }
StringBuffer的添加功能:
public StringBuffer append(String str)
:可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身。(添加完之后返回的还是原来的容器)
public StringBuffer insert(int offset,String str)
:在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身。(添加完之后返回的还是原来的容器)案例演示:
public class MyTest3 {public static void main(String[] args) {StringBuffer sb = new StringBuffer();sb.append(100).append(true).append("abv").append("cccc");sb.append(new char[]{'a','c','d'});sb.append(new Object());//把容器中的内容取出来转成字符String string = sb.toString();System.out.println(string); //100trueabvccccacdjava.lang.Object@1540e19d//StringBuffer(String str)//构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。String string1 = new StringBuffer("abc").append("100").toString();System.out.println(string1); //abc100} }
public class MyTest {public static void main(String[] args) {StringBuffer sb = new StringBuffer();sb.append(100).append(200);//在指定的索引处插入内容sb.insert(1, "abc"); //返回的还是原来的容器System.out.println(sb); //1abc00200} }
StringBuffer的删除功能:
public StringBuffer deleteCharAt(int index)
:删除指定位置的字符,并返回本身。
public StringBuffer delete(int start,int end)
:删除从指定位置开始指定位置结束的内容,并返回本身。案例演示:
public class MyTest2 {public static void main(String[] args) {//删除相关的方法StringBuffer sb = new StringBuffer("abcafeadsfaewfasdf你好啊");//根据指定索引删除单个字符sb.deleteCharAt(0); System.out.println(sb); //bcafeadsfaewfasdf你好啊//根据开始索引,和结束索引删除一段数据 含头不含尾 sb.delete(5, sb.length());System.out.println(sb); //bcafe} }
StringBuffer的替换和反转功能:
public StringBuffer replace(int start,int end,String str)
:从start开始到end用str替换
public StringBuffer reverse()
:字符串反转案例演示:
public class MyTest3 {public static void main(String[] args) {//替换的方法StringBuffer sb = new StringBuffer("abc ccc ddd fff");//从开始索引,到结束索引,替换成新的内容,返回的还是容器本身sb.replace(0, sb.length(), sb.toString().substring(0,sb.indexOf(" ")));System.out.println(sb); //abc//反转容器中的内容,返回的还是容器本身StringBuffer sb = new StringBuffer("abcd"); sb.reverse();System.out.println(sb); //dcba } }
StringBuffer的检索功能:
int indexOf(String str)
: 返回第一次出现的指定子字符串在该字符串中的索引。
int indexOf(String str, int fromIndex)
:从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
int lastIndexOf(String str)
: 返回最右边出现的指定子字符串在此字符串中的索引。
int lastIndexOf(String str, int fromIndex)
: 返回最后一次出现的指定子字符串在此字符串中的索引。案例演示:
public class MyTest3 {public static void main(String[] args) { StringBuffer sb = new StringBuffer("返回第一次出现的指定子字符串在该一符串中的索引");//返回第二个“一”的索引int index = sb.indexOf("一",sb.indexOf("一")+1);System.out.println(index); //16} }
StringBuffer的截取功能:
public String substring(int start)
:从指定位置截取到末尾。
public String substring(int start,int end)
:截取从指定位置开始到结束位置,包括开始位置,不包括结束位置。(含头不含尾)注意事项:
返回值类型不再是StringBuffer本身。案例演示:
public class MyTest5 {public static void main(String[] args) {StringBuffer sb = new StringBuffer();sb.append("我想要带你去浪漫的土耳其,还要一起去东京和巴黎,其实我喜欢迈阿密");//从指定的索引处,截取到末尾,返回值是截取到的字符串String s = sb.substring(13);System.out.println(s); //还要一起去东京和巴黎,其实我喜欢迈阿密//从开始索引截取到结束索引,返回的是截取到的字符串,含头不含尾String s1 = sb.substring(0, sb.indexOf("其")+1); System.out.println(s1); //我想要带你去浪漫的土耳其} }
StringBuffer的应用:把数组转成字符串
把数组中的数据按照指定个格式拼接成一个字符串,用StringBuffer的功能实现。
案例演示:
int[] arr = {1,2,3};
输出结果:"[1, 2, 3]
"public class MyTest {public static void main(String[] args) {int[] arr = {1, 2, 3};StringBuffer sb = new StringBuffer("[");for (int i = 0; i < arr.length; i++) {if(i==arr.length-1){sb.append(arr[i]).append("]");}else{sb.append(arr[i]).append(",");}}System.out.println(sb.toString());} }
StringBuffer和String:
StringBuffer和String的相互转换:
String — StringBuffer:
a:通过构造方法、 b:通过append()方法StringBuffer — String:
a: 使用substring方法、 b:通过构造方法 、c:通过toString()方法案例演示:
public class MyTest {public static void main(String[] args) { //String --- StringBufferString str="abc";//方式1StringBuffer sb = new StringBuffer(str);//方式2StringBuffer sb2 = new StringBuffer().append(str);StringBuffer sb3 = new StringBuffer().insert(0, str);StringBuffer sb4 = sb.replace(0, str.length(), str);//StringBuffer----StringStringBuffer sb5= new StringBuffer("abc");//方式1String str1 = sb5.toString();//方式2String str2 = sb5.substring(0);//方式3//String(StringBuffer buffer)//分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。String s = new String(sb5);} }
String和StringBuffer分别作为参数传递:
String作为参数传递:
String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递。
StringBuffer作为参数传递 ,和引用类型一样,形参的改变影响实参
案例演示:
public class MyTest {public static void main(String[] args) { //String 类型作为参数传递,跟基本类型一样String str = "abc";setString(str);System.out.println(str); //2 "abc"StringBuffer sb = new StringBuffer("你好世界,");setStringBuffer(sb);System.out.println(sb.toString()); //你好世界,爱生活,爱Java}private static void setStringBuffer(StringBuffer sb) {sb.append("爱生活,爱Java");}private static void setString(String str) {str = str + "dddd";System.out.println(str); // 1 "abcdddd"} }
StringBuffer和StringBuilder的区别:
StringBuffer :字符串缓冲区 , 线程安全的 ,效率低
StringBuilder :字符串缓冲区 ,线程不安全 ,效率高。
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
## Array类:
Array类概述:
针对数组进行操作的工具类。提供了数组排序,查找等功能。
成员方法:
public static String toString(int[] a)
:将数组转换成字符串类型。
public static void sort(int[] a)
:对指定 int 型数组的指定范围按数字升序进行排序。
public static int binarySearch(int[] a,int key)
:二分查找数组中指定的元素,前提是:元素必须有序。案例演示:
通过Arrays类的功能来进排序和查找。
public static void main(String[] args) { int[] arr = {1, 2, 45, 90, 43, 65, 87, 99, 234, 987, 154};//数组排序Arrays.sort(arr, 0, arr.length); //只排序一段System.out.println(Arrays.toString(arr)); //[1, 2, 43, 45, 65, 87, 90, 99, 154, 234, 987]//二分查找:元素必须有序int index = Arrays.binarySearch(arr, 43);System.out.println(index); //2}
binarySearch(二分查找):
二分查找原理:
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
前提:数组有序
方法:取中,比较
程序:
public class BinarySearch {public static void main(String[] args) {//二分查找int[] arr = {10,20,33,40,58,62,398,445};int index = binarySearch(arr, 58);System.out.println("查找元素的索引是:"+index);}private static int binarySearch(int[] arr,int cle) {//定义三个索引int minIndex = 0;int maxIndex = arr.length-1;int centerIndex = ( minIndex + maxIndex ) / 2;while( minIndex <= maxIndex ){if( cle == arr[centerIndex] ){return centerIndex;}else if( cle < arr[centerIndex]){maxIndex = centerIndex-1;}else if( cle > arr[centerIndex]){minIndex = centerIndex+1;}//重新计算中间索引centerIndex = ( minIndex + maxIndex ) / 2;}return -1;} }
基本类型包装类:
概念引入:
为了对基本数据类型进行更多的操作,更方便的操作,java就针对每一种基本数据类型提供了对应的类类型。
常用操作:
用于基本数据类型与字符串之间的转换。
基本类型和包装类的对应:
byte — Byte
short ---- Short
int — Integer
long — Long
float — Float
double — Double
char — Character
boolean — Boolean构造方法和常用方法(以Integer为例):
Integer 类在对象中包装了一个基本类型 int 的值。 Integer 类型的对象包含一个 int 类型的字段。
此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int类型时非常有用的其他一些常量和方法。
构造方法:
Integer( int value)
:构造一个新分配的 Integer 对象,它表示指定的 int 值。Integer(String s)
:构造一个新分配的 Integer 对象,它表示 String`参数所指示的 int 值。int num= 100; Integer integer = new Integer(num);//NumberFormatException 数字格式化异常 //要一个字面上是数字的字符串 Integer integer2 = new Integer("100");
常用方法:
public static Integer valueOf(int i)
: 返回一个表示指定int值得Integer实例。public static Integer valueOf(String s)
: 返回一个表示指定String值得Integer实例。public int intvalue()
:以int类型返回该Integer的值。public static String toString(int i)
: 返回一个表示指定整数的String对象。public String toString()
: 返回一个表示该Integer值的String对象。返回一个表示指定的
int
值的Integer
实例。
String和int类型的相互转换:
int — String
a、和""进行拼接
b、public static String valueOf(int i)
c、int – Integer – String
d、public static String toString(int i)
返回一个表示指定整数的 String 对象。
String — int
a、String -- Integer -- intValue();
b、public static int parseInt(String s)
:案例演示:
String和int类型的相互转换。public static void main(String[] args) {// int --- Stringint num = 123;String s = 123 +"";String s1 = String.valueOf(num);String s2 = new Integer(num).toString();//String string = Integer.toString(num);//String ---- intString str = "66";Integer integer = new Integer(str);int m = integer.intValue(); //将包装类型转换成对应的基本类型int m2 = Integer.parseInt(str); }
JDK5的新特性自动装箱和拆箱:
自动装箱:把基本类型转换为包装类类型。
自动拆箱:把包装类类型转换为基本类型。案例演示:
public static void main(String[] args) {Integer ii = 100;//自动装箱ii += 200;//自动拆箱。自动装箱Integer integer = new Integer(1000);int i = integer.intValue(); //手动拆箱Integer integer1 = Integer.valueOf(100);//手动装箱Integer integer2 = Integer.valueOf("10000");}
public static void main(String[] args) { Integer num=new Integer(100);Integer num2=100;//自动装箱int num3=50;int i = num.intValue();//手动拆箱int r=num+num3;System.out.println(r); }
Integer的面试题:
public static void main(String[] args) {Integer i1 = new Integer(127);Integer i2 = new Integer(127);System.out.println(i1 == i2); //false//Integer重写了父类的equals方法,比较的是值是否相等System.out.println(i1.equals(i2)); //trueSystem.out.println("-----------");Integer i3 = new Integer(128);Integer i4 = new Integer(128);System.out.println(i3 == i4); //falseSystem.out.println(i3.equals(i4)); //trueSystem.out.println("-----------");//这个值,超过了一个字节的范围,回去重新new一个Integer对象Integer i5 = 128;Integer i6 = 128;System.out.println(i5 == i6); //falseSystem.out.println(i5.equals(i6)); //trueSystem.out.println("-----------");// Integer integer = Integer.valueOf(127);//没有超过一个字节 会从缓存里面取出一个对象Integer i7 = 127;Integer i8 = 127;System.out.println(i7 == i8); //trueSystem.out.println(i7.equals(i8)); //trueInteger a = new Integer(127);Integer b = 127;System.out.println(i7 == i8); //falseSystem.out.println(i7.equals(i8)); //true}
Java的Integer、int与new Integer到底怎么回事?
https://blog.csdn.net/wangyang1354/article/details/52623703
JAV API 之 --- StringBuffer类、Array类、基本类型包装类相关推荐
- 1.19 String、StringBuffer和StringBuilder类的区别
在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串.String 类是不可变类,即一旦一个 String 对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至 ...
- 基于Delphi API写的UDP通讯类
转载地址:http://www.codefans.net/articles/159.shtml 基于Delphi API写的UDP通讯类,可以广播和单播,类作者:王彦鹏.这个类是作者2007年的时候写 ...
- java stringbuilder换行_初遇Java StringBuffer 和 StringBuilder 类利用 StringBuilder 给TextView实现换行处理...
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类. 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够 ...
- 如何让API回调你的VC类成员函数而不是静态函数
首先需要包含一个由yzwykkldczsh同志编写的模板类-----万能多用自适应无限制回调模板(为纪念友人fishskin,此模板又称为H>W模板) /******************** ...
- Boost:测试使用大小为0的类array <>特化
Boost:测试使用大小为0的类array <>特化 实现功能 C++实现代码 实现功能 测试使用大小为0的类array <>特化 C++实现代码 #include <s ...
- Boost:使用类array <>的简单示例
Boost:使用类array <>的简单示例 实现功能 C++实现代码 实现功能 使用类array <>的简单示例 C++实现代码 #include <iostream& ...
- String、StringBuffer、StringBuilder类
String.StringBuffer.StringBuilder类:java提供了string.stringbuffer两个类来封装字符串,并提供了一系列方法来操作字符串对象. String类是不可 ...
- Java 12 - Java StringBuffer和StringBuilder类
Java StringBuffer和StringBuilder类 当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类. 和String类不同的是,StringBu ...
- Eigen(5)Array类和元素级操作
0. 为什么使用Array 相对于Matrix提供的线性代数运算,Array类提供了更为一般的数组功能.Array类为元素级的操作提供了有效途径,比如点加(每个元素加值)或两个数据相应元素的点乘. 1 ...
最新文章
- R语言使用Rtsne包进行TSNE分析:通过数据类型筛选数值数据、scale函数进行数据标准化缩放、提取TSNE分析结果合并到原dataframe中(tSNE with Rtsne package)
- Windows系统 配置Java的JDK环境变量
- POJ 1113 Wall 求凸包
- matlab语言主要功能,2014年秋季学期《MATLAB语言及应用》课程试题-2
- UPD(user datagram protocol)
- R语言使用ggplot2包使用geom_density()函数绘制分组密度图(填充色配置、半透明填充色、添加均值线)实战(density plot)
- 教您在Xshell中清除历史记录
- 设计用于环境监测的无线传感网多跳数据采集、传输系统。在PC机上能显示当前测得的温/湿度、光照等环境信息。当光照超过一定阈值时,感知节点通过LED信号灯给以报警。
- 51CTO学院三周年
- Gallery与Imageswitch完美结合 做相册一绝啊
- 【最全】you-get和youtube-dl的安装和使用
- 如何定位web前后台的BUG
- 数据分析综述:一文带你详细了解自动驾驶技术
- pytorch下的lib库 源码阅读笔记(1)
- linux boot菜单列表,/boot/grub/menu.lst详解
- Recover My Files(文件恢复工具) V5.2.1.1964 汉化绿色特别版
- 玩转京东支付(python)
- 现在开网店赚钱吗?怎么开网店?还来得及吗?
- WSL自定义并加入usb-storage module
- 关于Android 版本更新