第十二章 JAVA中的字符串及常用方法

第一节 什么是JAVA中的字符串

在JAVA中,字符串被作为String类型的对象来处理,String类位于java.lang包中,默认情况下该包被自动导入左右的程序。
创建String对象的方法:

String s1="imooc";//创建一个字符串对象“imooc”为s1引用
String s2=new String();//创建一个空字符串对象为s2引用
String s3=new String("imooc");//创建一个字符串对象“imooc”为s3引用

每次new即代表是一个新的对象。

第二节 JAVA中字符串的不变性

String对象创建后不能被修改,是不可变的。所谓的修改其实是创建了新的对象,所指向的内存空间不同。

String s1="爱慕课";
String s2="爱慕课";//多次出现的字符常量,JAVA编译程序只创建一个。
String s3=new String("爱慕课");
String s4=new String("爱慕课");
s1==s2;true,两者的引用指向同一个对象。
s1==s3;false,两者是不同的对象。
s3==s4;false,两者是不同的对象。
s1="欢迎来到"+s1;字符串s1修改,指向新的内存空间。

需要了解的是:
1.在创建s1字符串时,声明了一个字符串对象, s1存放了到字符串对象的引用,然后通过s1=”欢迎来到”+s1;改变了字符串s1,其实质是创建了新的字符串对象,变量s1指向了新创建的字符串对象。
2.一旦一个字符串在内存中创建,则这个字符串将不可改变,如果需要一个可以改变的字符串,我们可以使用StringBuffer或者StringBuilder。
3.每次new一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用“==”比较时也为false,如果只需比较内容是否相同,应该使用equals()方法。

第三节 JAVA中String类的常用方法 I

String类提供了很多用来处理字符串的方法,如获取字符串长度,或者对字符串进行截取、将字符串转换为大写或者小写、字符串分割等,下面的方法中的类型一般代表数据类型,使用时是 方法.length() 这样使用

方法说明
int length()返回当前字符串的长度
int indexOf(ch)查找ch字符在该字符串中第一次出现的位置
int indexOf(String str)查找str字符串在该字符串中第一次出现的位置
int lastIndexOf(int ch)查找ch字符在该字符串中最后一次出现的位置
int lastIndexOf(String str)查找str字符串在该字符串中最后一次出现的位置
String substring(int beginIndex)获取从beginIndex位置开始到结束的子字符串
String substring(int beginIndex,int endIndex)获取从beginIndex位置开始到endIndex的子字符串
String trim()返回去除了前后空格的字符串
boolean equals(Object obj)将该字符串与指定对象比较,返回true或false
String toLowerCase()将字符串转换为小写
String toUpperCase()将字符串转换为大写
char charAt(int index)获取字符串中指定位置的字符
String[] split (String regex,int limit)将字符串分割为子字符串,返回字符串数组
byte[] getbytes将该字符串转换为byte数组
//定义一个字符串"学习 JAVA 编程" 注意JAVA前后有空格
String str="学习 JAVA 编程";
//打印出字符串长度
System.out.println("字符串的长度为:"+str.length());
//查找字符‘编’字的位置
char c='编';
System.out.println("编字在字符串中的位置是"+str.indexOf(c));
//查找子字符串 ‘JAVA’的位置
System.out.println("子字符串JAVA的位置"+str.indexOf("JAVA"));
//查询子字符串‘imooc’的位置,如果找不到返回-1
System.out.println("子字符串JAVA的位置"+str.indexOf("imooc"));
//按空格把字符串拆分成一个数组,并输出元素
String[] arr=str.split(" ");
System.out.print("按空格拆分成数组:"+Arrays.toString(arr));
System.out.println();
//获取索引位置[37)之间的字符串
System.out.print("获取索引位置[3,7)之间的字符串"+str.substring(3,7));

查找字符位置和拆分需要多练习。
JAVA中char是可以储存汉字的,一个汉字代表两个字节,char型字符是用来存储Unicode编码的字符的,使用单引号嵌入字符。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。String是一个final类可以使用+号直接连接生成新的字符串对象,将String设置成不可变的,可以让String的行为最优化,因为String在多数应用中都被大量使用,它的优化非常关键。
提示:
1.字符串的索引位置是从0开始的,范围从0-str.length()-1;
2.使用indexOf进行字符或字符串查找时,如果匹配则返回位置索引,如果没有匹配结果,返回-1;
3.使用substring(beginIndex,endIndex)进行字符串截取时,包括beginIndex位置的字符,但不包括endIndex位置的字符。

第三节 String类的常用方法 II 及equals方法
//定义一个字符串学习 JAVA 编程
String str="学习 JAVA 编程";
//将字符串转换为小写
System.out.println("转换成小写是:"+str.toLowerCase());
//获取索引位置为1的字符
System.out.println("索引位置为1的字符是:"+str.charAt(1));
//将字符串转换为byte[],并打印输出
byte[] b=str.getBytes();
System.out.println("转换为byte字节数组:")
for(int i=0;i<b.length();i++){
System.out.print(b[i]+" ");
}
System.out.println();
//和另外一个字符串“学习 JAVA 编程”比较
String st1=new String("学习 JAVA 编程");
System.out.println("用==号比较是否相等"+(st==st1));//false
System.out.println("用equals比较是否相等"+st.equals(st1));//true

注意,equals和==有什么区别呢?
==:引用类型,判断引用是否指向同一个地址,两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象;char或者其他基本类型时是比较值。
equals:比较存储在两个字符串对象中的内容是否一致。
equals在object类,包含在jdk里,不适合绝大多数场景,一般需要重写。equals的作用,用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回布尔类型的值。equals方法的基本使用:boolean b=obj1.equals(obj2);String类型比较不同的对象内容是否相同,应用equals而不是==,因为==用于比较基础数据类型和引用数据类型时具有不同的功能。举例来说:

//String作为对象来使用
//1.对象不同,内容相同;==为false equals为true
String s1=new String("JAVA");
String s2=new String("JAVA");
(s1==s2) false
s1.equals(s2) true

//2.同一对象,==和equals结果相同
String s1=new String("JAVA");
String s2=s1;
//指向了同一个引用,==和equals比较结果都为true

字节是计算机存储信息的基本单位,1 个字节等于 8 位, gbk 编码中 1 个汉字字符存储需要 2 个字节,1 个英文字符存储需要 1 个字节。所以我们看到上面的程序运行结果中,每个汉字对应两个字节值,如“学”对应 “-47 -89” ,而英文字母 “J” 对应 “74” 。同时,我们还发现汉字对应的字节值为负数,原因在于每个字节是 8 位,最大值不能超过 127,而汉字转换为字节后超过 127,如果超过就会溢出,以负数的形式显示。在试验上面某个转换成byte的程序时,输出的汉字一个是由三个字节组成的,都是负数,这个原因可能是utf-8码,编码方面的内容以后也需要多学习一些。

第四节 认识JAVA中的 StringBuilder 类

在JAVA中,除了可以使用String类来存储字符串,还可以使用StringBuilder类或者StringBuffer类来存储字符串。区别:String类具有不可变性,频繁操作字符串时,比如+,会生成很多临时变量,使用StringBuilder或者StringBuffer类可以避免此类问题,后面两者基本相似,不同之处,StringBuffer是线程安全的,而StringBuilder没有实现线程安全功能,所以性能略高。所以需要创建一个内容可变的字符串对象时,优先考虑 StringBuilder。创建对象方法和String方法一样:

//创建一个空的StringBuilder对象
StringBuilder st1=new StringBuilder();
//创建一个字符串imooc
StringBuilder st2=new StringBuilder("imooc");
第五节 JAVA中的 StringBuilder 类的常用方法

StringBuilder 类提供了很多方法来操作字符串:

方法说明
StringBuilder append(参数)追加内容到当前StringBuilder对象的末尾
StringBuilder insert(位置,参数)将内容插入到对象的指定位置
String toString()将StringBuilder对象转换成String对象
int length()获取字符串的长度
//创建StringBuilder字符串对象hello
StringBuilder str=new StringBuilder("hello");
//在字符串后面追加字符串 imooc 注意有个空格
str.append(" imooc");
//在字符串后面追加整数520
str.append(520);
//字符串的长度
str.length();
//指定位置插入内容11!
str.insert(11,"!");
//转换成String对象
String st2=str.toString();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值