Day11-2.String类型,及其所拥有的函数

1 String类型

  1. 概述:
    (1)用来定义字符串的类型。
    (2)引用数据类型。
    (3)在java.lang包定义,使用该类不需要导包
  2. 特点:
    (1)如果String类型直接接收一个字符串常量,那么这个字符串常量在常量池中定义,引用中存储的是常量池中字符串的地址值。
    (2)如果String类型通过new关键字创建,那么会在堆内存中创建一个对象,引用中 存储的是该对象的地址。
    如果使用new 创建了一个字符串对象,字符串对象中维护了一个字符数组,通过字符数组来保存数据。
    (3)字符串本身并不能被修改,String类型是一个不可变的字符序列。
           原因1:如果使用的是=字符串常量。字符串常量不能被改变
           原因2:如果使用的是new创建了一个字符串对象,对象中维护了一个私有的字符数组,私有的数组在其他类中不能直接访问,只可以通过公共的方法访问,String类型只提供了获取值的方法,没有提供公共改值的方法,所以通过new创建的字符串对象,属性值不能被改变的。

2 String类构造方法

  1. String()空参构造
    2.String(byte[] bytes):将一个字节数组转成一个字符串,解码
  2. String(byte[] bytes, int offset, int length):将字节数组的一部分转成字符串
  3. String(char[] value):将一个字符数组转成一个字符串
  4. String(char[] value, int offset, int count):将字符数组的一部分转成字符串
  5. String(String original):将字符串存储到字符数组中

代码

package demos5_string;

public class Demo03 {
    public static void main(String[] args) {
        //通过空参构造创建一个字符串对象
        String str1 = new String();
        System.out.println(str1);
        //将一个字节数组转为一个字符串
        //通过String的有参构造定义
        byte[] bs = {97,98,99};
        String str2 = new String(bs);
        System.out.println(str2);
        //将字符数组的一部分转为一个字符串
        String str3 = new String(bs,0,2);
        System.out.println(str3);
        //将字符数组转为一个字符串
        char[] chs = {'x','y','z'};
        String str4 = new String(chs);
        System.out.println(str4);
        //将字符数组的一部分转为一个字符串
        String str5 = new String(chs,1,2);
        System.out.println(str5);
        //通过有参构造,创建一个字符串对象
        String str6 = new String("abcxyz");
        System.out.println(str6);
    }
}

3 String类的判断功能

  1. contains(CharSequence s):判断是否包含参数
  2. endsWith(String suffix):判断调用者字符串是否以参数字符串结尾
  3. tartsWith(String prefix):判断调用者字符串是否以参数字符串开头
  4. equals(Object anObject):判断两个字符串是否一样
  5. equalsIgnoreCase(String anotherString):忽略大小写判断两个字符串是否一样
  6. isEmpty() :判断调用者是否为空

代码

package demos5_string;

public class Demo04 {
    public static void main(String[] args) {
        String str = "abcdefg";
        //判断调用者字符串是否包含参数字符串
        System.out.println(str.contains("abc"));//true
        System.out.println(str.contains("ac"));//false
        //判断调用者字符串是否以参数字符串开头
        System.out.println(str.startsWith("abc"));//true
        System.out.println(str.startsWith("a"));//true
        //判断调用者字符串是否以参数字符串结尾
        System.out.println(str.endsWith("fg"));//true
        System.out.println(str.endsWith("e"));//false
        //判断两个字符串属性值是否相同
        System.out.println(str.equals("abcdefg"));//true
        System.out.println(str.equals("ABCDEFG"));//false
        //忽略大小写判断两个字符串是否相同
        System.out.println(str.equalsIgnoreCase("ABCDEFG"));//true
        //判断字符串是否是空串
        System.out.println(str.isEmpty());//false
        System.out.println("".isEmpty());//true
        //null不能调用该方法,不属于任何数据
//        System.out.println(null.isEmpty());
    }
}

4 String类的获取功能

  1. charAt(int index)获取index索引对应的字符
  2. concat(String str):拼接字符串
  3. indexOf(int ch):获取ch字符在字符串中的索引
  4. indexOf(int ch, int fromIndex):从制定位置找ch字符出现的索引
  5. indexOf(String str):找str字符串在调用者中出现的索引
  6. indexOf(String str, int fromIndex):从制定位置寻找str出现的索引
  7. lastIndexof():从后往前找制定元素出现的索引
  8. length():返回字符串的长度
  9. substring(int beginIndex):从参数索引开始往后截取字符串,形成一个新串
  10. substring(int beginIndex, int endIndex):截取字符串一部分,形成一个新串
    包含头部索引,不包含尾部索引

代码

package demos5_string;

public class Demo05 {
    public static void main(String[] args) {
        String str = "abcdefgabc";
        //根据指定的索引获取对应的字符
        System.out.println(str.charAt(3));
        //索引越界异常
        //System.out.println(str.charAt(10));
        //拼接字符串
        String str2 = str.concat("Hello");
        System.out.println(str2);
        //根据指定的字符,获取对应的索引
        System.out.println(str.indexOf('a'));
        System.out.println(str.indexOf('x')==-1?"没有该元素":str.indexOf('x'));
        System.out.println(str.indexOf('a',3));
        //根据传递得字符串获取对应的索引
        System.out.println(str.indexOf("abc"));
        System.out.println(str.indexOf("abc",3));
        //从字符串后开始寻找字符出现的索引
        System.out.println(str.lastIndexOf('a'));
        //返回字符串元素的个数
        System.out.println(str.length());
        //截取字符串返回新的字符串
        String str3 = str.substring(2);
        System.out.println(str3);
        String str4 = str.substring(3, 7);
        System.out.println(str4);
    }
}

5 String类的转换功能

  1. getBytes():将字符串转成字节数组
  2. toCharArray():将字符串转为字符数组
  3. toLowerCase():将字符串转为全小写形式
  4. toUpperCase():将字符串转成全大写形式
  5. valueOf(参数):将基本类型数据的参数或者引用类型转为字符串类型,当前方法是一个 静态方法,可以通过类名直接调用。
  6. trim():去掉前后两边的空格
  7. replace(char oldChar, char newChar):将old元素改为new元素

代码

package demos5_string;

import java.util.Arrays;
import java.util.Locale;

public class Demo06 {
    public static void main(String[] args) {
        String str = "abcdefg";
        byte[] bs = str.getBytes();
        System.out.println(Arrays.toString(bs));
        //如果打印的数组不是一个字符数组,统统将该数组当做一个Object对象打印的,打印的是数组的地址值
        System.out.println(bs);
        char[] chs = str.toCharArray();
        //打印的如果是一个字符数组,有一个特殊的方法,遍历字符数组的元素
        System.out.println(chs);
        //将字符串转为全大写
        System.out.println(str.toUpperCase());
        //将字符串转为全小写
        System.out.println("ABCD".toLowerCase());

        //将其他各种类型的参数,统统转为字符串类型
        int i = 100;
        String s = String.valueOf(i);//100   "100"
        System.out.println(s);
        String s2 = String.valueOf(12.345);
        System.out.println(s2);

        String s3 = "   he llo ";
        System.out.println(s3.trim());//去掉字符串前后的空格

        //将字符串中的老字符串,替换为新的字符串
        String s4 = "I love java , java not love me";
        String s5 = s4.replace("java", "you");
        System.out.println(s5);
    }
}

6 String案例讲解

6.1 案例1

1、分析以下程序,判断控制台上的输出结果是什么:

    String s1 = "abc"; 
    String s2 = "abc"; 
    String s3 = new String("abc"); 
    String s4 = new String("abc"); 
    System.out.println(s1 == s2); //true 
    System.out.println(s3 == s4); //false
System.out.println(s1 == s3);//false
    System.out.println(s1.equals(s2)); //true
    System.out.println(s3.equals(s4));//true
System.out.println(s1.equals(s4));//true

6.2 案例2

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

代码

package demos5_string;

import java.util.Scanner;

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

        Scanner sc = new Scanner(System.in);

        for(int i = 1;i <= 3;i++){
            System.out.println("请录入用户名");
            String name = sc.nextLine();
            System.out.println("请录入密码");
            String password = sc.nextLine();
            if(name.equals("admin") && password.equals("123")){
                System.out.println("登录成功!!!");
                break;
            }else{
                int x =  3-i;
                if(x == 0){
                    System.out.println("登录失败,没有机会录入");
                }else{
                    System.out.println("登录失败,你还有" +x+"次机会");
                }
            }
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值