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. 1.19 String、StringBuffer和StringBuilder类的区别

    在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串.String 类是不可变类,即一旦一个 String 对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至 ...

  2. 基于Delphi API写的UDP通讯类

    转载地址:http://www.codefans.net/articles/159.shtml 基于Delphi API写的UDP通讯类,可以广播和单播,类作者:王彦鹏.这个类是作者2007年的时候写 ...

  3. java stringbuilder换行_初遇Java StringBuffer 和 StringBuilder 类利用 StringBuilder 给TextView实现换行处理...

    当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类. 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够 ...

  4. 如何让API回调你的VC类成员函数而不是静态函数

    首先需要包含一个由yzwykkldczsh同志编写的模板类-----万能多用自适应无限制回调模板(为纪念友人fishskin,此模板又称为H>W模板) /******************** ...

  5. Boost:测试使用大小为0的类array <>特化

    Boost:测试使用大小为0的类array <>特化 实现功能 C++实现代码 实现功能 测试使用大小为0的类array <>特化 C++实现代码 #include <s ...

  6. Boost:使用类array <>的简单示例

    Boost:使用类array <>的简单示例 实现功能 C++实现代码 实现功能 使用类array <>的简单示例 C++实现代码 #include <iostream& ...

  7. String、StringBuffer、StringBuilder类

    String.StringBuffer.StringBuilder类:java提供了string.stringbuffer两个类来封装字符串,并提供了一系列方法来操作字符串对象. String类是不可 ...

  8. Java 12 - Java StringBuffer和StringBuilder类

    Java StringBuffer和StringBuilder类 当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类. 和String类不同的是,StringBu ...

  9. Eigen(5)Array类和元素级操作

    0. 为什么使用Array 相对于Matrix提供的线性代数运算,Array类提供了更为一般的数组功能.Array类为元素级的操作提供了有效途径,比如点加(每个元素加值)或两个数据相应元素的点乘. 1 ...

最新文章

  1. R语言使用Rtsne包进行TSNE分析:通过数据类型筛选数值数据、scale函数进行数据标准化缩放、提取TSNE分析结果合并到原dataframe中(tSNE with Rtsne package)
  2. Windows系统 配置Java的JDK环境变量
  3. POJ 1113 Wall 求凸包
  4. matlab语言主要功能,2014年秋季学期《MATLAB语言及应用》课程试题-2
  5. UPD(user datagram protocol)
  6. R语言使用ggplot2包使用geom_density()函数绘制分组密度图(填充色配置、半透明填充色、添加均值线)实战(density plot)
  7. 教您在Xshell中清除历史记录
  8. 设计用于环境监测的无线传感网多跳数据采集、传输系统。在PC机上能显示当前测得的温/湿度、光照等环境信息。当光照超过一定阈值时,感知节点通过LED信号灯给以报警。
  9. 51CTO学院三周年
  10. Gallery与Imageswitch完美结合 做相册一绝啊
  11. 【最全】you-get和youtube-dl的安装和使用
  12. 如何定位web前后台的BUG
  13. 数据分析综述:一文带你详细了解自动驾驶技术
  14. pytorch下的lib库 源码阅读笔记(1)
  15. linux boot菜单列表,/boot/grub/menu.lst详解
  16. Recover My Files(文件恢复工具) V5.2.1.1964 汉化绿色特别版
  17. 玩转京东支付(python)
  18. 现在开网店赚钱吗?怎么开网店?还来得及吗?
  19. WSL自定义并加入usb-storage module
  20. 关于Android 版本更新

热门文章

  1. 推荐学习《Python与量化投资从基础到实战》PDF及代码+《量化投资以Python为工具》PDF及代码...
  2. 人民日报海外网专访来也科技CEO汪冠春
  3. 大学计算机试卷分析报告,大学试卷分析报告
  4. Linux学习笔记之 LVM
  5. 自定义控件的方式适配图片,以及里面的一些技巧
  6. 人工智能如何助力建筑设计自动化?
  7. 惠普战66pro如何选购内存条?一篇文章讲解清楚
  8. 因果推断dowhy之-医学案例中的反事实分析
  9. TimeUnit笔记
  10. 骁龙865和mt6873相比怎么样?