Java字符串的基本操作

本文介绍了Java中的字符串操作,包括API概述、String类的构造方法、字符串创建对比、字符串比较、遍历、截取、替换和切割。重点讲解了charAt方法与toCharArray方法的效率差异,以及StringBuilder类用于提高字符串操作效率的原理。
摘要由CSDN通过智能技术生成

1.API概述

Application Programming Interface:应用程序接口;

JAVA API:JDK中提供各种功能的Java类;

2.String

2.1概述

  1. JAVA程序中,所有的“”字符串,都是String的对象;
  2. 字符串是常量,他们的值在创建后不能更改;
String name = "张三"; //new方法没有显示,但实际存在,在堆内存中开辟了空间存放数据;
name = "李四"; //也存在new方法,但没显示,实际上在堆内存中开辟了新的空间。“张三”的值没有改变,而是name指向了新的地址;

2.1 String构造方法

方法名 说明
public String() 创建空白字符串对象,不含任何内容
public String(char[] chs) 根据字符数组的内容,创建字符串对象
public String(String original) 根据传入的字符串内容,创建字符串对象
String s = " … " 直接赋值的方式创建字符串对象,内容就是双引号中的内容
//1.
String name = new String();

//2.
char[] ch = {
   'a','b','c'};
String name = new String(ch);

//3.
String name = new String("abc");

//4.
String name = "abc";

2.2 String字符串创建的对比

  1. 使用""方式,给出的字符串,只要字符序列相同(顺序、大小写),无论在程序中出现几次,JVM都只会创建一个String对象,并在字符串常量池中维护;

    1. 字符串常量池:当使用 “” 创建字符串对象时,系统会检查该字符串是否在字符串常量池中存在;(jdk7之后在堆内存中,之前在方法区中)
      1. 不存在:创建;
      2. 存在:不会重新创建,直接复用;
    String s1 = "abc"; //创建字符串对象“abc”,系统检查常量池,不存在,创建字符串,生成内存地址,s1指向内存地址;
    String s2 = "abc";//创建字符串对象“abc",系统检查常量池,存在,s2直接指向内存地址;
    sout(s1==s2); --> true
    
  2. 使用new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址不同;

    char[] chs = {
         'a','b'}; //创建数组对象,通过new在堆内存中开辟了内存空间,并将字符放入空间,返回地址值;
    String s1 = new String(chs); //使用new方法,堆内存中开辟空间,使用了chs数组创建对象,此内存中会记录chs数组的内存地址,内部会将字符转换为字符串;返回内存地址;
    String s2 = new String(chs);//使用new方法,堆内存中开辟空间,使用了chs数组创建对象,内存中会记录chs数组的内存地址,在内部将字符转换为字符串;返回内存地址;
    //s1 与 s2 都通过new开辟了新的空间,地址值不同;
    

  3. 常见问题

    1. String s1 = "abc";
      String s2 = "abc";
      s1 == s2 --> true
      
    2. String s1 = "abc";
      String s2 = new String("abc"); //这一句代码会创建2个对象;注1:
      s1 == s2 --> false
       //s1指向字符串常量池中的内存地址,s2指向堆内存的内存地址;
      //注1:通过new,在堆内存中开辟新的空间,调用构造方法,检查""中的内容是否在常量池中存在,不存在则创建,然后将其地址值复制一份,存放到new开辟的堆内存空间中,堆内存空间存放的是字符串在常量池中的地址值。再将堆内存空间的地址值返回给对象;
      
    3. String s1 = "abc"; //创建对象s1,系统检查常量池,不存在,创建字符串对象;返回地址值;
      String s2 = "ab"; //创建对象s2,系统检查常量池,不存在,创建字符串对象;放回地址值;
      String s3 = s2 + "c"; //创建对象s3,检查常量池,"c"不存在,创建字符串对象;
      //当使用+进行字符串拼接时,JAVA会在堆内存中创建StringBuilder对象,并开辟空间,然后自动调用StringBuilder的append的方法,在空间中完成字符串的拼接;完成后,依旧是StringBuilder类型,需要转换类型。自动调用StringBuilder中的toString方法进行转换,开辟新的空间,将转换好的String类型的数据存放此空间中;返回地址值,s3指向此String类型的地址;
      s1 == s3 
java字符串操作大全,适合初学者,浅显易懂 部JAVA字符串操作 2008-07-11 15:39:42| 分类: JAVA | 标签: |字号大中小 订阅 . JAVA字符串的方法 String a = "53c015"; //Integer.parseInt(s, radix) radix设置为10,表示10进制,16表示16进制啦 int i = Integer.parseInt(a, 16); 1、length() 字符串的长度   例:char chars[]={'a','b'.'c'};     String s=new String(chars);     int len=s.length(); 2、charAt() 截取一个字符   例:char ch;     ch="abc".charAt(1); 返回'b' 3、getChars() 截取多个字符   void getChars(int sourceStart,int sourceEnd,char target[],int targetStart)   sourceStart指定了子串开始字符的下标,sourceEnd指定了子串结束后的下一个字符的下标。因此,子串包含从sourceStart到sourceEnd-1的字符。接收字符的数组由target指定,target中开始复制子串的下标值是targetStart。   例:String s="this is a demo of the getChars method.";     char buf[]=new char[20];     s.getChars(10,14,buf,0); 4、getBytes()   替代getChars()的一种方法是将字符存储在字节数组中,该方法即getBytes()。 5、toCharArray() 6、equals()和equalsIgnoreCase() 比较两个字符串 7、regionMatches() 用于比较一个字符串中特定区域与另一特定区域,它有一个重载的形式允许在比较中忽略大小写。   boolean regionMatches(int startIndex,String str2,int str2StartIndex,int numChars)   boolean regionMatches(boolean ignoreCase,int startIndex,String str2,int str2StartIndex,int numChars) 8、startsWith()和endsWith()   startsWith()方法决定是否以特定字符串开始,endWith()方法决定是否以特定字符串结束 9、equals()和==   equals()方法比较字符串对象中的字符,==运算符比较两个对象是否引用同一实例。   例:String s1="Hello";     String s2=new String(s1);     s1.eauals(s2); //true     s1==s2;//false 10、compareTo()和compareToIgnoreCase() 比较字符串 11、indexOf()和lastIndexOf()   indexOf() 查找字符或者子串第一次出现的地方。   lastIndexOf() 查找字符或者子串是后一次出现的地方。 12、substring()   它有两种形式,第一种是:String substring(int startIndex)          第二种是:String substring(int startIndex,int endIndex) 13、concat() 连接两个字符串 14 、replace() 替换   它有两种形式,第一种形式用一个字符在调用字符串中所有出现某个字符的地方进行替换,形式如下:   String replace(char original,char replacement)   例如:String s="Hello".replace('l','w');   第二种形式是用一个字符序列替换另一个字符序列,形式如下:   String replace(CharSequence original,CharSequence replacement) 15、trim() 去掉起始和结尾的空格 16、valueOf() 转换为字符串 17、toLowerCase() 转换为小写 18、toUpperCase() 转换为大写 19、StringBuffer构造函数   StringBuffer定义了三个构造函数:   StringBuffer()   StringBuffer(int size)   StringBuffer(String str)   StringBuffer(CharSequence chars)      (1)、length()和capacity()     一个StringBuffer当前长度可通过length()方法得到,而整个可分配空间通过capacity()方法得到。      (2)、ensureCapacity() 设置缓冲区的大小     void ensureCapacity(int capacity)   (3)、setLength() 设置缓冲区的长度     void setLength(int len)   (4)、charAt()和setCharAt()     char charAt(int where)     void setCharAt(int where,char ch)   (5)、getChars()     void getChars(int sourceStart,int sourceEnd,char target[],int targetStart)   (6)、append() 可把任何类型数据的字符串表示连接到调用的StringBuffer对象的末尾。     例:int a=42;       StringBuffer sb=new StringBuffer(40);       String s=sb.append("a=").append(a).append("!").toString();   (7)、insert() 插入字符串     StringBuffer insert(int index,String str)     StringBuffer insert(int index,char ch)     StringBuffer insert(int index,Object obj)     index指定将字符串插入到StringBuffer对象中的位置的下标。   (8)、reverse() 颠倒StringBuffer对象中的字符     StringBuffer reverse() 分代码如下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值