Java核心类——String类

String类

概念

  String类就是字符串类型,是一个不可变的字符序列
  属于java.lang包,不需要导包.

特点


  为 String 类型赋值的字符串常量存储在字符串常量池中。可以进行重复使用的对象.
  字符串常量: 就是被 "" 括起来的字符串内容 

案例

package com.study.day14;

public class Demo6 {
    public static void main(String[] args) {
        String s1 = "老王";//"老王" --->作为一个字符串常量 存储到 方法区的串池
        String s2 = "老王";//先去字符串池中进行寻找 有没有 "老王" 如果有 直接使用其地址  如果没有进行创建

        System.out.println(s1 == s2);//地址是否相同
    }
}


package com.study.day14;

public class Demo6 {
    public static void main(String[] args) {
//        String s1 = "老王";//"老王" --->作为一个字符串常量 存储到 方法区的串池
//        String s2 = "老王";//先去字符串池中进行寻找 有没有 "老王" 如果有 直接使用其地址  如果没有进行创建
//
//        System.out.println(s1 == s2);//地址是否相同

        String s1 = "helloworld";
        String s2 = "hello"+"world";//常量
        System.out.println(s1.equals(s2));//true
        System.out.println(s1 == s2);//false

        int a = 5+6;//int a = 11;
    }
}

构造方法

    public String()
        创建一个空字符串

    public String(String original)
	创建参数字符串的一个副本(参数字符串是在常量池中,构造方法创建的字符串是在堆内存中)

    public String(byte[] arr)
	使用平台的默认字符集,将一个字节数组转成一个字符串 
	相关内容
	  1) 编码:编码是信息从一种形式或格式转换为另一种形式的过程.用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号
	  2) 解码:解码是一种用特定方法,把数码还原成它所代表的内容或将电脉冲信号、光信号、无线电波等转换成它所代表的信息、数据等的过程.
	  3) 常用编码表:ASCII、GBK、UTF-8   
	  4) String(byte[] bytes,Charset charset) 可以通过指定编码,构造一个新的字符串.


    public String(byte[] arr, int offset, int length)
	使用平台的默认字符集,将字节数组的一部分转成字符串

    public String(char[] arr)
	将字符数组转成字符串

    public String(char[] arr, int offset, int length)
	将字符数组的一部分转成字符串.

案例

 
package com.study.day14;

public class Demo6 {
    public static void main(String[] args) {
        //equals()与==比较
        //构造方法
//        String s = new String();//new 意味着 创建的对象在 堆内存中  不在串池中
//        String s1 = "";// "" 存在于串池中
//
//        System.out.println(s.equals(s1));
//        System.out.println(s == s1);

        //创建了两个对象
       // String s = new String("老王");//创建了几个对象 ?  "老王"  --->串池中  new String()
//
//        String s1 = "hello";
//        String s2 = "world";
//        String s3 = s1 + "world";
//        String s4 = "hello" + s2;
//        String s5 = s1 + s2;
//        String s6 = new String(s1+s2);
//        String s7 = "helloworld";

//        System.out.println(s7.equals(s1));//false
//        System.out.println(s7.equals(s2));//false
//        System.out.println(s7.equals(s3));//true
//        System.out.println(s7.equals(s4));//true
//        System.out.println(s7.equals(s5));//true
//        System.out.println(s7.equals(s6));//true

//        System.out.println(s7 == s3);//false
//        System.out.println(s7 == s4);//false
//        System.out.println(s7 == s5);//false
//        System.out.println(s7 == s6);//false
        //System.out.println(s3 == s4);//false

     
       	// public String(byte[] arr)详解
        	// 对于字符  编码     ASCII  0  ---- 127   占 char中的一个字节
        	//byte   -128 ---- 127
        	//char  0 --127-- 65535    2字节
        	// 0000 0000  0000 0000     1010  0101           1010 0101
        	// 汉字  占char两个字节

//        String s = "刘";// utf-8 编码 10进制  ---> 2进制  0000 0000   0000 0000     0000 0000
//        byte[] bytes = s.getBytes();//编码
//        System.out.println(bytes.length);
//
//        for (int i = 0; i < bytes.length; i++) {
//            System.out.println(bytes[i]);
//        }
		//输出结果:-27  -120   -104
        
        //解码
//        byte[]  bytes = {-27,-120,-104};//刘
//        String s = new String(bytes,0,2);//解码
//        System.out.println(s);
        
        
		//字符遍历
        String s = "长风破浪会有时";
        char[] chars = s.toCharArray();
//        for (int i = 0; i < chars.length; i++) {
//            System.out.println(chars[i]);
//        }

        String result = new String(chars,2,2);
        System.out.println(result);


    }
}

成员方法

判断是否相同

    public boolean equals(Object anObject)
        判断对象和参数对象描述的字符串内容是否相同

    public boolean equalsIgnoreCase(String anotherString)
        忽略大小写,判断对象和参数对象描述的字符串内容是否相同

是否包含子串

    public boolean contains(CharSequence s)
        判断对象是否包含了 s这个子串

    public boolean startsWith(String prefix)
        判断对象是否以 prefix 开头

    public boolean endsWith(String suffix)
        判断对象是否以suffix 结尾

判断是否是空串

    public boolean isEmpty()

获取字符串字符的个数

    public int length()

根据索引获取字符

    public char charAt(int index)
        返回对象字符串中索引为index的字符.index范围在[0,length()-1]

    public String substring(int beginIndex)
        获取一个字符串,内容是从当前字符串的 beginIndex 索引开始

    public String substring(int beginIndex,int endIndex)
        获取一个指定索引范围的子串
            1.包含头不包含尾,返回的结果中,不包含 endIndex 索引指向的字符.
            2.所有的方法都无法修改字符串对象本身,一般都是返回一个新的字符串对象

查找位置输出索引

    public int indexOf(String str)
        返回的是 str 这个字符串在对象字符串中第一次出现的索引

    public int indexOf(String str,int fromIndex)
        从 fromIndex 索引开始寻找,找到 str 字符串在当前字符串中第一次出现的索引
	注意:无论从哪个位置开始找,所有字符的索引都不会变化

    public int lastIndexOf(String str,int fromIndex)
	从 fromIndex 索引开始寻找,找到 str 字符串在当前字符串中最后一次出现的索引
	注意:无论从哪个位置开始找,所有字符的索引都不会变化

字符串转数组

    public byte[] getBytes()
	将当前字符串转成字节数组

    public char[] toCharArray()
	将当前的字符串转成字符数组

字符串转大小写

    public String toLowerCase()
	将当前的字符串,转成全小写形式

    public String toUpperCase(Locale locale)
	将当前的字符串,转成全大写形式

分、合、替换

  public String[] split(String regex)
      使用指定的字符串规则将对象字符串切割成多个子串

  public String concat(String str)
      将当前对象,和参数 str 进行拼接,返回拼接后的长字符串(不常用,因为更多使用的是运算符 +)

  public String replace(CharSequence target,CharSequence replacement)
      将对象中包含的所有target替换成replacement

  public String trim()
      去掉字符串左右两边的空格,制表符

返回Object参数的字符串表示形式

  public static String valueOf(Object obj)

常见操作

字符串内容的比较

案例:

//正确用户名是admin,密码是123
//键盘录入用户名和密码,一共有三次机会,如果录入错误,前两次提示还有几次机会,最后一次提示“登录机会已经用完”,录入正确,提示“登录成功”

package com.study.day14;

import java.util.Scanner;

public class Demo7 {
    public static void main(String[] args) {
//        正确用户名是admin,密码是123
//        键盘录入用户名和密码,一共有三次机会,如果录入错误,前两次提示还有几次机会,最后一次提示“登录机会已经用完”,录入正确,提示“登录成功”

        String username = "admin";
        String password = "123";

        Scanner scanner = new Scanner(System.in);

        for (int i = 0; i <3; i++) {
            //输入3次
            System.out.println("请输入用户名:");
            String inputUsername = scanner.next();
            System.out.println("请输入你的密码:");
            String inputPassword = scanner.next();

            //判断
            if (inputUsername.equals(username)&&inputPassword.equals(password)){
                //登录成功
                System.out.println("登录成功");
                break;
            }else{
                System.out.println("用户名 或者 密码错误 你还有"+(2-i)+"次机会");
                if (i==2){
                    System.out.println("机会已经用完");
                }
            }

        }
    }
}

字符串遍历

    1、遍历字符串,用charAt()访问字符输出遍历结果
    2、字符串转成字符数组,遍历输出

案例:

//第一种:
package com.study.day14;

public class Demo7 {
    public static void main(String[] args) {
        String s = "安哥拉发动机爱上放大";

        //1
        for (int i = 0; i < s.length(); i++) {
            System.out.println(s.charAt(i));
        }
    }
}

//第二种:
package com.study.day14;

public class Demo7 {
    public static void main(String[] args) {
        String s = "安哥拉发动机爱上放大";

        //1
        for (int i = 0; i < s.length(); i++) {
            System.out.println(s.charAt(i));
        }

        //2
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }
    }
}

字符串拼接

案例:

package com.study.day14;

public class Demo7 {
    public static void main(String[] args) {

        //拼接 abcdefg................z
        String s = "";

        for (char i = 'A'; i <= 'Z'; i++) {
            s+=i;
        }
        System.out.println(s.toLowerCase());

    }
}

字符串反转

案例:

//倒叙遍历 进行重新拼接 
package com.study.day14;

public class Demo7 {
    public static void main(String[] args) {

        //拼接 abcdefg................z
        String s = "abcdefghijklmnopqrstuvwxyz";

        //倒叙遍历
        String result = "";
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(s.length()-1-i);
            //System.out.println(c);
            result+=c;
        }
        System.out.println(result);

    }
}

posted @ 2021-04-18 22:22  泰初  阅读(381)  评论(0)    收藏  举报