常量池:

字符串一旦被初始化就不会被改变

        String s="123";
s="abc";
System.out.print(s);

这段代码看上去s的值是被改变了的,实际上123就是一个对象,他存在于常量池中,abc也是一个对象,s的值实际上是指向123或者abc的地址。

所以当我们使用String s="123";来定义字符串的时候,会先查看常量池中是否有123,有就直接赋值123的地址,如果没有就创建123。

   1     String s="123";
2 String s1=new String("123");
3 System.out.println(s==s1);
4 System.out.print(s.equals(s1));
结果:

    false

    true

 

2中,实际上是创建了两个对象,一个new,一个堆内存中。equals本来和==一样是比较地址值得,但是String类重写了equals方法,比较的是内容。

获取

1.1获取字符串中字符的长度(个数)

int length()

1.2根据位置获取字符

char charAt(int index)

1.3根据字符(子串)获取其在字符串中第一次出现的位置    

char indexOf(int ch)
char indexOf (int ch,int fromIndex)从指定位置进行查找
char indexOf(String str)
char indexOf (String str,int fromIndex)

上面的是从前向后找,下面的是从后向前找

char lastIndexOf(int ch)
char lastIndexOf (int ch,int fromIndex)从指定位置进行查找
char lastIndexOf(String str)
char lastIndexOf (String str,int fromIndex)

1.4获取字符串中的子串

String substring(int beginIndex,int endInedx)包含befin不包含end
String substring(int beginIndex)

转换

1.1将字符串变成字符串数组

String[] split(String regex) 这里的切割点有时会涉及到正则表达式,所以要用\将特殊字符转化成普通字符。注意\.也是正则规则中的一部分

public class Text {
public static void main(String[] args){
String s="张三.李四.王五";
String[] arr=s.split("\\.");
for(int i=0;i<arr.length;i++)
System.out.println(arr[i]);
}
}

1.2将字符串变成字符数组

char[] toCharArray();

1.3将字符串变成字节数组

byte[] getBytes();

1.4将字符串中的字母转换大小写

String toUpperCase();
String toLowerCase();

1.5将字符串中的内容进行互换

String replace(String oldst,String newst)
String replace(char oldch,char newch)

1.6将字符串两端的空格去掉

String trim();

1.7将字符串进行连接

String concat(String);

判断

1.1比较两个字符串是否相同

boolean equals(anObject)
boolean equalsIgnoreCase(anotherString)不区分大小写

1.2判断字符串中是否包含指定字符串

boolean contains(String str)

1.3字符串是否以指定字符串开头(结尾)

boolean startsWith(String)
boolean endsWith(String)

1.4比较两个字符串的字典顺序大小

int compareTo(anotherString);
int compareToIgnoreCase(anotherString)不区分大小写

intern

  • 当调用intern方法时,如果池已经包含与equals(Object)方法确定的相当于此String对象的字符串,则返回来自池的字符串。 否则,此String对象将添加到池中,并返回对此String对象的引用。

    (实际上就是看对象的值123在池当中有没有,如果没有那我就在池中创建一个,如果有那我就直接拿来用)

    public class Text {
    public static void main(String[] args){
    String s=new String("123");
    String s1=s.intern();
    String s2=s1.intern();
    System.out.println(s==s1);
    System.out.println(s1==s2);
    }
    }
    结果
    false
    true

StringBuffer

就是字符串缓冲区,用于存储数据的容器

特点:1长度是可变的

2可以存储不同数据类型

   3最终要转成字符串进行使用

   4可对字符串进行修改

既然是个容器那么它具备什么功能呢?

1添加

StringBuffer append(data)在结尾进行添加
StringBuffer insert(index,data)在指定位置插入
public class Text {
public static void main(String[] args){
StringBuffer s=new StringBuffer();
s.append("1").append("2").append("b");
s.insert(1, "a");
System.out.println(s);
}
}
结果:1a2b

2删除

StringBuffer delete(start,end);包含头不包含为尾
StringBuffer deleteCharAt(int index);删除指定位置的元素

3查找

char charAt(index)返回指定位置字符
int indexOf(str);返回子串第一次出现的位置
int kastIndexOf(str)从字符串末尾开始查询

4修改

StringBuffer replace(start, end, str);
void setCharAt(index, ch);只修改一个字符。注意它没有返回值类型

5

StringBuffer reverse();将字符串头尾进行对调

new StringBuffer()初始化的默认长度为16

new StringBuffer(index)可以指定其初始化的长度(如果可以确定数据的大小,最好使用这个,可以避免开辟空间和进行运算)

StringBuilder

jdk1.5以后出现了功能和StringBuffer一模一样的对象,即Stringbuilder

不同的是:

Stringbuilder是线程不同步的,通常用于单线程,效率高,因为不用每次都判断锁。

StringBuffer线程同步,通常用于多线程,安全。(如果删除和添加同时进行了,那么就会造成安全隐患)

    Object lock;
public StringBuffer append(int x){
synchronized(lock){ }
}
public StringBuffer delete(int start,int end){
synchronized(lock){ }
}

JDK升级的目的:

1简化书写

2提高效率

3增加安全性

String常用操作的更多相关文章

  1. java的string常用操作

    import java.util.*; public class Demo3 { public static void main(String args[]){ String str = " ...

  2. swift 中String常用操作

    1.  字符串定义 var s = "aaaaaa" // 两个字符串均为空并等价. var emptyString = ""   var anotherEmp ...

  3. STL string常用操作指令

    s.insert(pos,args); 在pos之前插入args指定的字符.pos可以是一个下标或一个迭代器.接受下标的版本返回一个指向s的引用;接受迭代器的版本返回指向第一个插入字符的迭代器. s. ...

  4. String 类上的常用操作

    java 中String 类上的常用操作: 首先创建对象  String line = new String("String demo"); String line2 = new ...

  5. Kotlin——初级篇(八):关于字符串(String)常用操作汇总

    在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin--初级篇(三):数据类型详解这篇文章. 在 ...

  6. Redis string类型常用操作

      Redis 有 string.list.set.zset.hash数据类型.string类型是最基础的,其他类型都是在string类型上去建立的,所以了解熟悉string类型的常用操作对于学习re ...

  7. Kotlin——关于字符串(String)常用操作汇总

    在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin——初级篇(三):数据类型详解这篇文章. 在 ...

  8. byte数据的常用操作函数[转发]

    /// <summary> /// 本类提供了对byte数据的常用操作函数 /// </summary> public class ByteUtil { ','A','B',' ...

  9. Hdfs常用操作

    一.linux rm是删除,不是del 二.常用操作 package hdfs; import java.io.FileInputStream; import java.io.FileNotFound ...

随机推荐

  1. MySQL 学习笔记(三):完整性和触发器设计

    (一)完整性设计 方法一.在设计表时定义约束 删除数据库school,建立新数据库school1 drop database school; create database school; use s ...

  2. HDU6300-2018ACM暑假多校联合训练1003-Triangle Partition

    题意是给3n个点,其中不可能存在任意三点共线的情况,让你在其中建n个三角形,点不能重复使用,三角形不能相互覆盖 做法是给每个点排序,按照先y轴排,再x轴排的顺序,三个三个一组从下往上输出,有人说是凸包 ...

  3. 使用C#来编写一个异步的Socket服务器

    介绍 我最近需要为一个.net项目准备一个内部线程通信机制. 项目有多个使用ASP.NET,Windows 表单和控制台应用程序的服务器和客户端构成. 考虑到实现的可能性,我下定决心要使用原生的soc ...

  4. c++继承构造析构调用原则以及特殊变量处理

    一.继承中的构造析构调用原则 1.子类对象在创建时会首先调用父类的构造函数 2.父类构造函数执行结束后,执行子类构造函数 3.当父类构造函数有参数时,需要在子类的初始化列表中显示调用: 4.析构函数调 ...

  5. mysql 5.7.22 解压缩安装

    1.下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 直接点击下载项 下载后: 2.可以把解压的内容随便放到一个目录,我的是如 ...

  6. OEL6.8安装虚拟带库模拟器

    最近在虚拟机下搭建了一个OSB备份环境,其中使用到了虚拟带库,以下是虚拟带库的配置过程,简要记录之. 1.下载虚拟带库的源码(mhvtl-2016-03-10.tgz). 2.解压缩源码. # cd ...

  7. git 各个区的区别

    Git有三大区(工作区.暂存区.版本库)以及几个状态(untracked.unstaged.uncommited) 把文件往Git版本库里添加的时候,是分两步执行的: 第一步是用 git add 把文 ...

  8. ecshop 模板机制

    ECShop模板是基于smarty 文件名cls_template.php lib_main.php中的assign_template()会设置我们的网店的公共信息及网站设置:assign_dynam ...

  9. [转] Ubuntu安装Fcitx以及Fcitx输入中文不显示候选词框的解决办法

    [From] http://blog.csdn.net/qq_21397217/article/details/52447263 1. 安装Fcitx所需组件 $ sudo apt install f ...

  10. jQuery随笔-自定义属性获取+tooltip

    1.Jquery自定义属性获取 1) 通过自定义属性值获取document console.log($('[data-id='+item_id+']',listWrap)); $('[data-id= ...