面向对象基础——String类 深藏阁楼爱情的钟 2022-07-28 00:19 227阅读 0赞 ## String类的两种实例化方法 ## A:直接赋值 public class StringDemo01{ public static void main(String args[]){ String name = "liuxun" ; // 实例化String对象 System.out.println("姓名:" + name) ; } }; B:通过关键字new public class StringDemo02{ public static void main(String args[]){ String name = new String("liuxun") ; // 实例化String对象 System.out.println("姓名:" + name) ; } }; ## String类的内容比较 ## 以往基本数据类型才用 == 进行比较。如果直接比较字符串呢? 如下所示: public class StringDemo04{ public static void main(String args[]){ String str1 = "hello" ; // 直接赋值 String str2 = new String("hello") ; // 通过new赋值 String str3 = str2 ; // 传递引用 System.out.println("str1 == str2 --> " + (str1==str2)) ; // false System.out.println("str1 == str3 --> " + (str1==str3)) ; // false System.out.println("str2 == str3 --> " + (str2==str3)) ; // true } }; ![Center][] 内存分析如下: ![Center 1][] 现在使用的判断相等,是判断地址空间是否相等,判断的是地址值。如果要想判断其内容是否相等,则必须使用String类中提供的equals()方法完成,该方法的使用如下: public class StringDemo05{ public static void main(String args[]){ String str1 = "hello" ; // 直接赋值 String str2 = new String("hello") ; // 通过new赋值 String str3 = str2 ; // 传递引用 System.out.println("str1 equals str2 --> " + (str1.equals(str2))) ; // true System.out.println("str1 equals str3 --> " + (str1.equals(str3))) ; // true System.out.println("str2 equals str3 --> " + (str2.equals(str3))) ; // true } }; ![Center 2][] 结论:String有两种比较方式。 一种是使用 == 完成,比较的是地址值 另一种使用equals 方法完成,比较的具体内容,开发中比较常用。 ## String类两种实例化方式的区别 ## public class StringDemo07{ public static void main(String args[]){ String str1 = "hello" ; // 直接赋值 String str2 = "hello" ; // 直接赋值 String str3 = "hello3" ; // 直接赋值 System.out.println("str1 == str2 --> " + (str1==str2)+" "+str1) ; // true System.out.println("str1 == str3 --> " + (str1==str3)+" "+str2) ; // true System.out.println("str2 == str3 --> " + (str2==str3)+" "+str3) ; // true } }; ![Center 3][] 会发现使用直接赋值的方式声明字符串时,如果该字符串的内容和别的字符串的内容相同时,则直接把具有内容相同的字符串的指向给赋值过来。如果没有发现与新声明字符串内容相同的字符串,才会开辟新的堆内存。 而使用 new String()的方式创建字符串的话,就会先开辟一个字符串的堆空间存放字符串的内容,然后通过new 再开辟一个堆空间,将第一个堆空间里的内容给复制一份拷过来,将new出来的堆空间地址赋给一个栈内存,而第一个堆空间等待GC的回收。 ![Center 4][] 一般只要不是特殊情况,则使用第一种直接赋值的方式即可。 ## 字符串的内容不可改变 ## 这是字符串的一个重要特征。 public class StringDemo09{ public static void main(String args[]){ String str = "hello" ; // 声明字符串 str = str + " world!!!" ; // 修改字符串 System.out.println("str = " + str) ; } }; ![Center 5][] 实际上字符串内容的改变,改变的是内存地址的引用关系。 所以在开发中避免如下操作 public class StringDemo10{ public static void main(String args[]){ String str1 = "liuxun" ; // 声明字符串对象 for(int i=0;i<100;i++){ // 循环修改内容 str1 += i ; // 字符串的引用不断改变 } System.out.println(str1) ; } }; 这样的操作,要断开连接100次才可以完成。这样的操作性能很低,应该避免使用,而如果非要使用这种操作,JAVA专门提供了StringBuffer类 专门完成这样的功能。 # String类的常用方法 # 最主要方法是查询文档 ![Center 6][] ![Center 7][] Split()和replaceAll()方法是需要正则匹配的。 ## 1字符数组与字符串 ## 一个字符串可以变为一个字符数组,同样,也可以把一个字符数组,变为一个字符串。在String类中提供了如下操作方法。 将字符串变为字符数组: public char toCharArray() 将字符数组变为字符串: public String(char\[\] value) public String(char\[\] value,int offset, int count) public class StringAPIDemo01{ public static void main(String args[]){ String str1 = "hello" ; // 定义字符串 char c[] = str1.toCharArray() ; // 将一个字符串变为字符数组 for(int i=0;i<c.length;i++){ // 循环输出 System.out.print(c[i] + "、") ; } System.out.println("") ; // 换行 String str2 = new String(c) ; // 将全部的字符数组变为String String str3 = new String(c,0,3) ; // 将部分字符数组变为String System.out.println(str2) ; // 输出字符串 System.out.println(str3) ; // 输出字符串 } }; ![Center 8][] ## 2从字符串中取出指定位置的字符 ## 如果想使用此操作,则肯定返回一个char类型 public char charAt(int index) public class StringAPIDemo02{ public static void main(String args[]){ String str1 = "hello" ; // 定义String对象 System.out.println(str1.charAt(3)) ; // 取出字符串中第四个字符 } }; ## 3字符串与byte数组的转换 ## byte数组(字节数组),在一般的IO操作中会经常使用到。 在String类中提供了以下的方法可以进行字符串与字节数组之间的转换。 字符串变为字节数组:public byte\[\] getBytes() 将一个字节数组变为字符串: 将全部字节数组变为String: public String(byte\[\] bytes) 将部分字节数组变为String: public String(byte\[\] bytes, int offset, int length) public class StringAPIDemo03{ public static void main(String args[]){ String str1 = "hello" ; // 定义字符串 byte b[] = str1.getBytes() ; // 将字符串变为byte数组 System.out.println(new String(b)) ; // 将全部的byte数组变为字符串 System.out.println(new String(b,1,3)) ; // 将部分的byte数组变为字符串 } }; ![Center 9][] ## 4取得一个字符串的长度 ## 要想取得字符串的长度: public int length() 切记:数组的长度为length不带括号。而String是个类 ,length是个方法必须要有括号。 public class StringAPIDemo04{ public static void main(String args[]){ String str1 = "hello liuxun" ; // 定义字符串变量 System.out.println("\""+str1+"\"的长度为:"+str1.length()) ; } }; ## 5查找指定的字符串是否存在 ## 在实际的操作中,经常会使用到判断一个字符串中是否存在某些内容,此时就可以使用以下的方法。 从头开始查找:public int indexOf(String str) 从指定的位置开始查找:public int indexOf(String str, int fromIndex) 查找的时候方法的返回值是一个int类型的数据,此数据表示的是一个字符串的具体位置,如果没有查找到此字符串则返回 -1. public class StringAPIDemo05{ public static void main(String args[]){ String str1 = "abcdefgcgh" ; // 声明字符串 System.out.println(str1.indexOf("c")) ; // 查到返回位置 System.out.println(str1.indexOf("c",3)) ; // 查到返回位置,从第4个位置开始查找 System.out.println(str1.indexOf("x")) ; // 没有查到返回-1 } }; ![Center 10][] ## 6、去掉空格 ## 如果假设是由用户输入的话,则就可能出现多余的空格,在这种操作中就可以使用trim()方法去掉字符串左右的空格,但是字符串中间的空格是不可能去掉的。 public class StringAPIDemo06{ public static void main(String args[]){ String str1 = " hello " ; // 定义字符串 System.out.println(str1.trim()) ; // 去掉左右空格后输出 } }; ![Center 11][] ## 7 字符串的截取 ## 从一个指定的字符串中取出里面的部分内容,使用的方法。 从指定的位置一直截取到结束位置:public String subString(int beginIndex) 截取指定范围的字符串:public String subString(int beginIndex, int endIndex) public class StringAPIDemo07{ public static void main(String args[]){ String str1 = "hello world" ; // 定义字符串 System.out.println(str1.substring(6)) ; // 从第7个位置开始截取 System.out.println(str1.substring(0,5)) ; // 截取0~5个位置的内容 } }; ![Center 12][] ## 8 拆分字符串 ## 如果现在需要按指定的字符串去拆分一个字符串的话,则使用:public String\[\] split(String regex) 返回的是截取后的字符串数组。 public class StringAPIDemo08{ public static void main(String args[]){ String str1 = "hello world" ; // 定义字符串 String s[] = str1.split(" ") ; // 按空格进行字符串的拆分 for(int i=0;i<s.length;i++){ // 循环输出 System.out.println(s[i]) ; } } }; ![Center 13][] ## 9 大小写转换 ## 此功能在一般的开发语言中都会存在,将一个大写的字符串中的全部字母全部转为小写或者将一个字符串中的全部小写字母转为大写。 小写变大写:public String toUpperCase() 大写变小写:public String toLowerCase() public class StringAPIDemo09{ public static void main(String args[]){ System.out.println("将\"hello world\"转成大写:" + "hello world".toUpperCase()) ; System.out.println("将\"HELLO WORLD\"转成小写:" + "HELLO WORLD".toLowerCase()) ; } }; ![Center 14][] ## 10 判断是否以指定的字符串开头或结尾 ## 在String中可以使用以下的两个方法完成: 判断是否以指定的字符串开头:public boolean startsWith(String prefix) 判断是否以指定的字符串结尾:public boolean endsWith(String suffix) public class StringAPIDemo10{ public static void main(String args[]){ String str1 = "**HELLO" ; // 定义字符串 String str2 = "HELLO**" ; // 定义字符串 if(str1.startsWith("**")){ // 判断是否以“**”开头 System.out.println("(**HELLO)以**开头") ; } if(str2.endsWith("**")){ // 判断是否以“**”结尾 System.out.println("(HELLO**)以**结尾") ; } } }; ![Center 15][] ## 11 不区分大小写的比较 ## 在String类中equals()方法是可以用来进行字符串的比较的,但是此种比较方法只能针对于大小写完全一样的字符串进行比较,如果现在要是想进行不区分大小写的比较,则可以使用以下方法: public boolean equalsIgnoreCase(String anotherString) public class StringAPIDemo11{ public static void main(String args[]){ String str1 = "HELLO" ; // 定义字符串 String str2 = "hello" ; // 定义字符串 System.out.println("\"HELLO\" equals \"hello\" " + str1.equals(str2)) ; System.out.println("\"HELLO\" equalsIgnoreCase \"hello\" " + str1.equalsIgnoreCase(str2)) ; // 不区分大小写的比较 } }; ![Center 16][] ## 12 字符串的替换功能 ## 在String类中提供了以下的方法用于字符串的替换操作。 public String replaceAll(String regex, String replacement) public class StringAPIDemo12{ public static void main(String args[]){ String str = "hello" ; // 定义字符串 String newStr = str.replaceAll("l","x") ; // 现在将所有的l替换成x System.out.println("替换之后的结果:" + newStr) ; } }; ![Center 17][] [Center]: /images/20220727/90334333915e4f61b793476c8da84b3a.png [Center 1]: /images/20220727/22becb5deec94ec4a5d8fe387d14c40c.png [Center 2]: /images/20220727/14857113bd124b258f4955bfcff2a6a0.png [Center 3]: /images/20220727/4a772bbee4d64b3faa204c37004a853b.png [Center 4]: /images/20220727/78285e1d20a14003a5a388c40736c1cf.png [Center 5]: /images/20220727/53860646b5244056be611ee34a647830.png [Center 6]: /images/20220727/956a97c1804d41be8c227a7cddf6d3ce.png [Center 7]: /images/20220727/d74805e503ce473c9d1dd2b69319111c.png [Center 8]: /images/20220727/8f1cafd406794ea59a5e0aeaa54feeb4.png [Center 9]: /images/20220727/0bab9ce31c9c4111b664aed97a2b81a0.png [Center 10]: /images/20220727/79b596c36fbe484497cb23a93a577e53.png [Center 11]: /images/20220727/39e6afaa1729453da07b13e8dee3a6dd.png [Center 12]: /images/20220727/debc948a8adc4cac9e1715544ea80286.png [Center 13]: /images/20220727/8febcb3438dd435b89b14951d00431d0.png [Center 14]: /images/20220727/992e6e605c164a9b956660d877812a61.png [Center 15]: /images/20220727/23ffd3bf5fe34087b14e688a9ce59c83.png [Center 16]: /images/20220727/da2205d962ee41c684216e38a323bef7.png [Center 17]: /images/20220727/e03cd1dc856b4419a8f5795c195a8ce9.png
相关 Java面向对象编程基础:类,对象 在Java面向对象编程中,"类"和"对象"是两个基本的概念。 1. 类(Class): 类是对象的模板或者蓝图。它定义了一组属性(数据成员)以及一组行为(方法)。当你创建一个 青旅半醒/ 2024年09月10日 05:21/ 0 赞/ 23 阅读
相关 面向对象基础——String类 String类的两种实例化方法 A:直接赋值 public class StringDemo01{ public static void main( 深藏阁楼爱情的钟/ 2022年07月28日 00:19/ 0 赞/ 228 阅读
相关 面向对象基础——类与对象的定义 面向对象的概念 ![Center][] ![Center 1][] 封装性:对外部不可见。可以保护程序中的某些内容。 继承性:扩展功能的。 类与对象的关 淩亂°似流年/ 2022年07月27日 14:52/ 0 赞/ 194 阅读
相关 面向对象-String类 1、字符串是一个特殊的对象。 2、字符串一旦初始化就不可以被改变。 String类就代表一个字符串,不可以被复写,因为它没有子类。 代码: pub 客官°小女子只卖身不卖艺/ 2022年05月29日 01:53/ 0 赞/ 168 阅读
相关 java面向对象——String类 java.lang.String 类由final关键字修饰,表示该类不能被继承 该类用于描述字符串,使用该类创建的对象可以描述java应用程序中的所有字符串字面值(常量) 水深无声/ 2022年05月09日 15:03/ 0 赞/ 256 阅读
相关 Java面向对象-String类(下) 这里介绍一些String类的常用方法: 1, char chartAt(int index) 返回指定索引处的char值 这里的index 是从0开始的; 我们先上下实例 冷不防/ 2022年03月11日 12:06/ 0 赞/ 228 阅读
相关 Java面向对象-String类(上) 1,实例化String对象 有两种方式,我们直接看代码: <table> <tbody> <tr> <td style="text-align:left; 心已赠人/ 2022年03月11日 12:06/ 0 赞/ 253 阅读
相关 Java面向对象-String类综合案例 “ aB232 23 &\( s2 ”指定字符串,要求去掉前后空格,然后分别统计其中英文字符,空格,数字和其他字符的个数; 思路:首先去掉前后空格,我们查找api文本,可以找 亦凉/ 2022年03月11日 11:54/ 0 赞/ 245 阅读
相关 Java面向对象-String类字符串反转 字符串反转,“abcdefg”,通过编程得到一个新的字符串“gfedcba”; 思路:我们定义一个新字符串,然后遍历原先字符串,从后往前遍历,每次遍历获取元素然后追加到新字符 我会带着你远行/ 2022年03月11日 02:10/ 0 赞/ 259 阅读
还没有评论,来说两句吧...