ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

String类常用操作及问题

2022-07-22 16:42:55  阅读:144  来源: 互联网

标签:常用 String s2 s1 字符串 操作 public 字节


使用API文档

image-20220722095501713

String类

在java.lang包下,String表字符类型,字符串是常量(保存在常量池),它们的值在创建之后不能更改,但它们可以被共享。

String s1 = "abc"; 
String s2 = "abc"; 
// 内存中只有一个"abc"对象被创建,同时被s1和s2共享。
  • String在jdk8及以前内部使用的就是字符数组jdk9及以后内部使用的就是字节数组

    String str = "abc";
    相当于:
    char data[] = {'a', 'b', 'c'};
    String str = new String(data);
    // String底层是靠字符数组实现的。

字符数组和字节数组区别

String.getBytes()是将字符串转化为一个字节数组,而String.toCharArray()是将一个字符串转化为一个字符数组。

【例如】

​ 字节:byte bys[] =“国庆60周年”.getBytes();

​ 字符:char chs[]=“国庆60周年”.toCharArray();

【那么字节数组和字符数组有什么区别呢?】

字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下1个字节等于8位二进制。

字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等。一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示。

  • ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
  • UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。
  • Unicode 编码中,一个英文为一个字节,一个中文为两个字节。
  • 符号:英文标点为一个字节,中文标点为两个字节

常见构造方法

方法名 说明
public String() 创建一个空白字符串对象,不含有任何内容
public String(char[] chs) 根据字符数组的内容,来创建字符串对象
public String(byte[] bs) 根据字节数组的内容,来创建字符串对象
public String(String original) 根据传入的字符串内容,来创建字符串对象
String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc

String常用方法

常见判断方法

  • public boolean equals(Object anObject) :

    • 作用: 将此字符串(调用分的对象)与指定对象(传递给方法的参数)进行比较内容是否相同, 区分大小写。
      举例:s1.equals(s2),比较s1和s2的内容是否相同,相同返回true,否则返回false。
  • public boolean equalsIgnoreCase (String anotherString):

    • 作用:将此字符串与指定对象进 行比较内容是否相同,忽略大小写
      举例:s1.equalsIgnoreCase(s2),比较s1和s2的内容是否相同,不区分大小写。
  • public boolean contains(String str) :

    • 作用:当且仅当此字符串包含指定的str时,返回 true。
      举例:s1.contains(s2),s1中包含s2,返回true,不包含返回false 。

常见获取方法

  • public int length () :返回此字符串的长度
    举例:s.length() 获取s中的字符的数量。

  • public String concat (String str):将指定的字符串连接到该字符串的末尾。
    举例:s1.concat(s2) 把s2连接到s1的末尾 等价于 s1 += s2

  • public char charAt (int index) : 返回指定索引处的 char值。
    举例:s1.charAt(5) 获取s1中索引为5的字符。

    遍历:

    for(int i=0; i<s.length(); i++) {
      s.charAt(i);  // 就是指定索引处的字符值
    }
    
  • public int indexOf (String str): 返回指定子字符串第一次出现在该字符串内的索引。
    举例:s1.indexOf(s2) 查找s2在s1中第一次出现的位置,如果不存在,返回-1。

  • public String substring (int beginIndex) :

    • 作用:返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
      举例:s1.substring(5) 截取s1字符串从索引5开始一直到最后的内容。
  • public String substring (int beginIndex, int endIndex) :

    • 作用:返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。
      举例:s1.substring(5,10) 截取 s1字符串从索引5开始一直到索引10之间的内容(包含5,不包含10)。

常见转换方法

  • public char[] toCharArray ():

    • 作用:字符串 ===>字符数组。
      举例:s1.toCharArray() 把s1变成字符数组。
  • public byte[] getBytes ():

    • 作用:字符串===>字节数组。
      举例:s1.getBytes() 把s1变成字节数组。
  • public String replace (String oldStr, String newStr) :

    • 作用:字符串中的所有的oldStr替换成newStr。
      举例:s1.replace("a","A") 把s1中的所有的"a"替换成"A"。
  • public String[] split(String regex):

    • 作用:将此字符串按照给定的regex(规则)拆分为字符串数组。
      举例:"a,b,c,d".split(",") 把"a,b,c,d"按照逗号切割,将切割后的多个子字符串存入String[] 中。

常见面试题

创建字符串对象两种方式的区别

  • 通过构造方法创建:通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同

  • 直接赋值方式创建:以String s3 = "abc";方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护

==和equals区别:

  • ==比较基本数据类型:比较的是具体的值
  • ==比较引用数据类型:比较的是对象地址值
  • equals比较String类型: 比较的是对象的内容是否相同

image-20220722155924593

cpublic class FacialObject {
    public static void main(String[] args) {
		char[] chs = {'a','b','c'};
        String s1 = new String(chs);
        String s2 = new String(chs);
        String s3 = "abc";
        String s4 = "abc";					//my	//正确答案
        System.out.println(s1 == s2);		//F		//F
        System.out.println(s1 == s3);		//T		//F	
        System.out.println(s3 == s4);		//T		//T
        System.out.println(s1.equals(s2));	//F		//T
        System.out.println(s1.equals(s3));	//F		//T
        System.out.println(s3.equals(s4));	//T		//T
        
         /*
            此处+左右两边都是字符串常量对象,
            在编译期间JVM就能计算出结果字符串"Hello World",
            而该字符串"Hello World"在常量池空间中已经有了,
            不会再重新创建新的字符串处理对象"Hello World"了
         */
        s5="Helloword";
        s6="Hello"+"word";
        System.out.println(s5 == s6);		//T
        System.out.println(s5.equals(s6));	//T
        
        /*
            s8是变量,JVM在编译期间无法确定最终的结果的,【如果在s8前添加final关键字,则结果为TT】
            简单理解: 在使用+进行字符串拼接时,只要+左右两边出现了字符串变量,
            那就相当于new
            +中有字符串变量进行拼接时,内部使用StringBuilder完成字符串拼接后,
            再把StringBuilder通过new String的方法,转换成String对象
         */
        s7="Helloword";
        s8="Hello";
        s9=s8+"word";
        System.out.println(s7 == s9);		//F	
        System.out.println(s7.equals(s9));	//T
	}
}

标签:常用,String,s2,s1,字符串,操作,public,字节
来源: https://www.cnblogs.com/touchTomorrow/p/16506168.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有