String操作

15 篇文章 0 订阅

1、  Sting的两个实例化式:

·直接使用”string”方式: 产生的是一个字符串常量。

·new String(String str)方式:产生一个新的字符串。

public static void main(String[] args) {

       String str1 = "Hello jtlyuan";/**字符串常量**/

       String str2 = new String("Hello jtlyuan");/**字符串对象**                                /

       System.out.println(str1==str2);//false

       System.out.println(str1.equals(str2));//true

    }

 

2、同一个字符串常量在内存中只存在一份

范例:上面的代码改为:

    public static void main(String[] args) {

       String str1 = "Hello jtlyuan";/**字符串常量**/

       String str2 = new String("Hello jtlyuan");/**产生新的一个字符串**/

       String str3 = "Hello jtlyuan";/**其实这次并没用产生新的字符串,str1在内存中是同一个**/

       System.out.println(str1==str2);//false

       System.out.println(str1.equals(str2));//true

       System.out.println(str1==str3);//true

    }

再看:下面的例子

String str1 = "Hello jtlyuan";/**字符串常量***/

       String str2 = "Hello "+"jtlyuan";                                                                                                             

       System.out.println(str1==str2);//true

为上面str1和str2是同一个呢,原因是每个字符串常量在堆内存中只存在一份。

 

3、分析

String str2 = new String("Hello jtlyuan");/**产生新的一个字符串**/                                           


如图:使用了new方式,上面的例子一个产生了两份堆内存,一的new出来的,一个是以双引号’’方式产生的。所有在开发中千万不要使用new的方式来产生字符串。

 

4、字符串一旦声明了就不能改变;’

       String str = "Hello";

       str += "World";


内存分析:改变的只是str引用的指针,而不是“hello“内存的内容。

 

字符串的常用方法(重点)

5、字符与字符串

         ·在各个语言中实际上一个字符串就是一个一组字符。

下面是字符与字符之间的转换方法:

·public char charAt(int index)在字符串中找到每个字符,返回指定索引处的 char 值。索引范围为从 0 到 length() – 1
        ·public char[] toCharArray()

将此字符串转换为一个新的字符数组。

        ·public String(char[] value)

分配一个新的 String,使其表示字符数组参数中当前包含的字符序列

        ·public String(char[] value, int offset,int count)

value - 作为字符源的数组。

offset - 初始偏移量。

count - 长度。

分配一个新的 String,它包含取自字符数组参数一个子数组的字符。

public class CopyOfStringTest2 {

    public static void main(String[] args) {

       String str = "jtlyuansdfsjofjedlo";

       char ch = str.charAt(8);//取出字符串中第9个字符

       System.out.println(ch);

       char a[] = str.toCharArray();//把字符串转换为字符数组

       for(int i=0;i<a.length;i++){

           System.out.print(a[i]+"、");

       }                                     

       System.out.println("\n"+a);//打印a数组

       System.out.println(new String(a));//字符数组转换为字符串                                         

       System.out.println(new String(a,2,7));//截取某些字符数组为字符串

    }

}

/*结果:

d

j、t、l、y、u、a、n、s、d、f、s、j、o、f、j、e、d、l、o、

[C@18a992f

jtlyuansdfsjofjedlo

lyuansd

*/

 

6、字节与字符串:

与字符数组的操作一致,字节数组和字符串之间已经转换

·String -à 字符数组:public byte[] getBytes()
·字节数组 --àString: public String(byte[] bytes)和
String(byte[] bytes, int offset, int length)

 

7、判断字符串是否以指定的形式开头或结尾

public boolean startsWith(String prefix)

测试此字符串是否以指定的前缀开始。

public boolean endsWith(String suffix)

测试此字符串是否以指定的后缀结束

    public static void main(String[] args) {

       String str = "jtlyuansdfsjofjedlo";

       System.out.println(str.startsWith("jtl"));

       System.out.println(str.endsWith(""));                                       

    }

/*

true

true

*/

 

8、替换操作:public String replaceAll(String regex,String replacement)

    public static void main(String[] args) {

       String str = "jtlyuansdfsjofjedlo";                                               

       System.out.println(str.replaceAll("s", "***"));//打印jtlyuan***df***jofjedl

    }

 

9、字符截取:public String substring(int beginIndex,int endIndex)

public static void main(String[] args) {

       String str = "jtlyuansdfsjofjedlo";

       System.out.println(str.substring(3, 5));//打印yu                                      

    }

 

10、字符串的拆分:public String[] split(String regex)

根据给定正则表达式的匹配拆分此字符串。

    public static void main(String[] args) {

       String str = "jtlsssyuansdfsjofjedlo";

       String[] st = str.split("s");

       for(int i=0;i<st.length;++i){

           System.out.print(st[i]+"、");//打印jtl、、、yuandfjofjedlo、        

       }

    }

 

11、字符查找:public int indexOf(String str)

返回指定子字符串在此字符串中第一次出现处的索引。没有找到就返回-1;

public static void main(String[] args) {

       String str = "jtlsssyuansdfsjofjedlo";

       System.out.println(str.indexOf("an"));//打印8                             

       System.out.println(str.indexOf("adsf"));//打印-1

    }

 

12、其他操作:

去掉头尾的空白处:public String trim()

获取长度:public intlength();在数组中是用a.length

 


附加题:

public static void main(String[] args){
String a="a";
String b =a+"b";
System.out.println(b=="ab");//false
String c ="a"+"b";
System.out.println(c=="ab");//true
}

String b =a+"b";//因为有变量引入,在运行时,会创建一个新的字符串对象,所以此时 b=="ab" 不等
而 String c ="a"+"b";//常量字符串相连接 编译器直接优化成"ab"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值