java字符串当中有三个关于字符串对象的类。

String

首先谈论下他们各自的含义:

1.String含义为引用数据类型,是字符串常量.是不可变的对象,(显然线程安全)在每次对string类型进行改变的时候其实都等同与生成了一个新的String对象.然后指针指向新的String对象,所以经常改变内容的字符串最好不使用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了之后.JVM的垃圾回收(GC)就会开始工作,对系统的性能会产生影响。

源码String开头可以看到是被final修饰的类,不能被继承

public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
}

String的方法有很多,下面用的比较多几个。

public void show(CharSequence seqence);
char charAt(int index)
//返回指定索引的 char 值。
int length()
//返回此字符序列的长度。
CharSequence subSequence(int start, int end)
//返回一个新的CharSequence,它是此序列的子序列。
String toString()
//返回一个包含此序列中字符的字符串,该字符串与此序列的顺序相同。

例子

/**
*
* @author liqh
* @version 创建时间:2019年4月23日 下午3:22:17
* @Description: *把字符串的首字母转大写,其他字母转小写,同时将每个字符使用_下划线隔开
*/
public class StringDemo03 { public static void main(String[] args) {
String str = "youAreWelcome";
//1.获取得到首字母,将首字母转换大写
String firstStr= String.valueOf(str.charAt(0)).toUpperCase();
//2.获取其他字母,将其他字母转为小写
String opther = str.substring(1).toLowerCase();
//3.将首字母和其他字母拼接
System.out.println(firstStr.concat(opther));
//4.转化为数组对象
String[] arr = firstStr.concat(opther).split("");
//5.利用String的join进行拼接
String result = String.join("_", arr);
System.out.println(result); } } 实现结果:Y_o_u_a_r_e_w_e_l_c_o_m_e

StringBuffer:

  • 字符串缓冲区
  • 字符串池
  • 字符流缓冲池 数据库连接池 线程池...
  • StringBuffer

StringBuffer常用方法

StringBuffer() :构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。

StringBuffer(CharSequence seq):

构造一个字符串缓冲区,它包含与指定CharSequence 相同的字符。

StringBuffer(int capacity) :构造一个不带字符,但具有指定初始容量的字符串缓冲区。

StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容对StringBuffer对象本身进行操作,而不是生成新的对象.所所以在改变对象引用条件下,一般推荐使用StringBuffer.同时主要是使用append和insert方法。

StringBuffer实现增删改查和一些其他的方法

增 :
StringBuffer append(String str)
StringBuffer insert(int offset, String str)
删 :
StringBuffer deleteCharAt(int index)
StringBuffer delete(int start, int end)
改:
public StringBuffer replace(int start,int end,String str)
其他:
public StringBuffer reverse()
public String substring(int start)
public String substring(int start,int end)

3.StringBuilder

StringBuilder是线程不安全,不同步,效率高的可变字符序列,提供一个与StringBuffer兼容的API,但不同步.设计作为StringBuffer的一个简易替换,用在字符缓冲区被单个线程使用的时候.效率比StringBuffer更快

区别:

  1. 执行速度:StringBuilder > StringBuffer > String
  2. 线程安全:StringBuffer线程安全.StringBuilder线程不安全
  3. String适用与少量字符串操作
  • StringBuilder适用单线程下在字符缓冲区下进行大量操作的情况
  • StringBuffer使用多线程下在字符缓冲区进行大量操作的情况

String和 StringBuffer实现字符串的反转

import java.util.Scanner;

/**
*
* @author liqh
* @version 创建时间:2019年4月23日 下午8:31:30
* @Description: 使用String和StringBuffer实现字符串倒置
*
*/
public class Demo01 { public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入字符串:");
String str= input.next();
reverseString(str);
String str2= input.next();
reverseStringBuffer(str2); } public static String reverseString(String str) {
String result="";
//从最后进行for循环遍历
for (int i =str.length()-1 ; i >= 0; i--) {
//str.charAt(i)每一个字符
result+=str.charAt(i);
}
System.out.println("反转的字符串:"+result);
return result;
} public static String reverseStringBuffer(String str) {
System.out.println(new StringBuffer(str).reverse().toString());
return new StringBuffer(str).reverse().toString();
} } /*请输入字符串:
1234567890
反转的字符串:0987654321*/

java 字符串笔记的更多相关文章

  1. Java开发笔记(三十四)字符串的赋值及类型转换

    不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工.为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类 ...

  2. Java开发笔记(三十五)字符串格式化

    前面介绍了字符串变量的四种赋值方式,对于简单的赋值来说完全够用了,即便是两个字符串拼接,也只需通过加号把两个目标串连起来即可.但对于复杂的赋值来说就麻烦了,假设现在需要拼接一个很长的字符串,字符串内部 ...

  3. Java开发笔记(三十六)字符串的常用方法

    不管是给字符串赋值,还是对字符串格式化,都属于往字符串填充内容,一旦内容填充完毕,则需开展进一步的处理.譬如一段Word文本,常见的加工操作就有查找.替换.追加.截取等等,按照字符串的处理结果异同,可 ...

  4. Java开发笔记(三十七)利用正则串分割字符串

    前面介绍了处理字符串的常用方法,还有一种分割字符串的场景也很常见,也就是按照某个规则将字符串切割为若干子串.分割规则通常是指定某个分隔符,根据字符串内部的分隔符将字符串进行分割,例如逗号.空格等等都可 ...

  5. Java开发笔记(三十八)利用正则表达式校验字符串

    前面多次提到了正则串.正则表达式,那么正则表达式究竟是符合什么定义的字符串呢?正则表达式是编程语言处理字符串格式的一种逻辑式子,它利用若干保留字符定义了形形色色的匹配规则,从而通过一个式子来覆盖满足了 ...

  6. Java开发笔记(四十)日期与字符串的互相转换

    前面介绍了如何通过Date工具获取各个时间数值,但是用户更喜欢形如“2018-11-24 23:04:18”这种结构清晰.简洁明了的字符串,而非啰里八唆依次汇报每个时间单位及其数值的描述.既然日期时间 ...

  7. Java开发笔记(四十四)本地日期时间与字符串的互相转换

    之前介绍Calendar的时候,提到日历实例无法直接输出格式化后的时间字符串,必须先把Calendar类型转换成Date类型,再通过格式化工具SimpleDateFormat获得字符串.而日期时间的格 ...

  8. java笔记 -- java字符串

    概念: Java字符串就是Unicode字符序列, Java没有内置的字符串类型, 而是在标准Java类库中提供了一个预定义类. 每个用双引号括起来的字符串都是String类的一个实例.String ...

  9. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

随机推荐

  1. jenkins-参数化构建(三)插件:Git Parameter

    一.下载插件Git Parameter (更加省事) 在配置中branch和tag用的比较多 注意:Credential 可以添加密码,jenkins如果在root用户下载的请改   /etc/sys ...

  2. 关于“svn: Can't connect to host '*.*.*.*': 由于连接方在一段时间后没有正确答复或连接”的解决方法

    阿里云服务器环境(PHP+Nginx+MySQL) [原因1]svnserve.conf 没写好,当然你先备份一份先: cp svnserve.conf svnserve.conf.bak 打开此文件 ...

  3. mongodb 笔记

    1.java驱动下的mongo操作 1.1 数据库连接 package com.mongodb.text; import java.net.UnknownHostException; import c ...

  4. Jmeter压测基础(二)——Badboy功能、Jmeter参数化、检查点、集合点、动态关联、图形监控

    Badboy 以下稍微介绍一下badboy的部分功能: 1.Record;play(badboy打开后默认是recording状态) 2.Assertion(检查点/断言) 3.Variable: t ...

  5. JavaScript中的this所引用的对象和如何改变这个引用

    this是函数内部的一个特殊对象,它引用的是函数执行环境对象.也就是运行是基于函数的执行环境绑定. 1.在网页全局作用域中调用函数时,this引用window var color='black'; f ...

  6. 工程经验记录yolo框下移引发的思考

    事件叙述: 缘起:yolo检测框,在项目开始之前由于在一些场景下观察到yolo的框在大车检测的时候,回归的位置不好,一些车辆的尾部会被漏掉,特别是车牌部分,恰好被框在外面的时候,在后续就无法进行车牌检 ...

  7. 【转】mysql保存图片技术决定:保存二进制文件还是只保存图片相对路径,图片放在硬盘上面?

    最近遇到上面这个问题,一开始我就果断否决了数据库保存图片的策略,主要是太蠢!事实上我的决定是正确的,我仅仅理解为mysql读写性能提高的境界,具体为什么可以提高?很模糊,知道我看到了这里: 大佬做的实 ...

  8. 时间、日历(time、calendar、datatime)

    import time import calendar import datatime #获取代码运行的时间差 start = time.time() end = time.time() print( ...

  9. mac上sed -i 执行失败报错

    比如说我要替换version.txt文件中的version=1.1 为version=1.2,比如test.txt文件内容如下: version=1.1 此时我们会使用sed来替换,如果是涉及比较多的 ...

  10. UML作业第三次:分析《书店图书销售管理系统,绘制类图

    plantuml类图绘制方法的学习: 1.关于类图的学习: 类图显示了系统的静态结构. 类:类图中的主要元素,用矩形表示.矩形的上层表示类名.中层表示属性.下层表示方法. 类之间的关系:关联.依赖.聚 ...