0
点赞
收藏
分享

微信扫一扫

String一些方法简介

花海书香 2022-03-11 阅读 80

String
一些常见的方法练习
键盘录入字符串  :
public class test {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = sc.nextLine();
        System.out.println(s);
    }
}
nextInt 只允许输入整数型数据,否则就会报错;数据间允许存在空格或者TAB,回车键作为结束  举例:1 2 33 输出:1
next  返回的是String类,输入的数据默认认为字符、串形式  输入:字符间存在空格或者TAB,回车键录入结束  输出:只截取第一个空格前的字符  举例: 1  2  s  输出为1
nextLine:输入:允许输入数据间有各种符号;回车结束键盘录入  输出:获取回车前所有字符,包括空格和TAB等 举例:输入为 1  2  3  fx  输出为: 1  2  3  fx
注意:nextLine可以将数据完整的接收过来, 
      nextInt和nextLine方法配合使用的时候,nextLine的方法没有键盘录入的机会 
      建议,今后键盘录入数据的时候,如果是字符串,和整数一起接收,建议使用next方法接收字符串

String概述:
java.lang(核心包)  使用的时候不用导包
被双引号包裹起来的都是字符串
字符串是一个常量,它的值创建后就可以再进行更改了
虽然String的值是不可变的,但他们可以被共享
字符串常量池:当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在
不存在:创建
存在:不会重新创建,而是直接复用
通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同
结论:双引号创建的字符串对象,在字符串常量池中储存,通过构造方法创建的字符串对象,在堆内存中存储
String类比较特殊,打印其对象名的时候,不会出现内存地址,而是该对象所记录的真实内容
String创建的构造方法
public String()  创建一个空白的字符串对象,不含有任何内容
public String(char[] chs) 根据字符数组的内容,来创建字符串对象
public String(String original)  根据传入的字符串内容,来创建字符串对象
String s="abcd" 直接赋值的方式创建字符串的对象
创建字符串对象的区别对比
注意:==作比较
        基本数据类型作比较,比较的是具体的值
        int a =10;
        int b =20;
        System.out.print(a==b);//false
        引用数据类型:比较地址值
        Student s1=new Student(30);
        Student s2=s1;
        System.out.print(s1==s2);//true
下列代码的运行结果是:
        String s1="abc";
        String s2="abc";
        System.out.print(s1==s2);//true
        
        char[] chs={'a','b','c'}
        String s3=new String(chs);
        String s4=new String(chs);
        System.out.print(s3==s4);//false
以""方式给出的字符串,只要字符序列相同(顺序和大小写),无论再程序中出现几次,JVM都只会建立一个String对象,并在字符串常量池中维护

字符串常量池:当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在
不存在:创建
存在:不会重新创建,而是直接复用
通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址值不同
结论:双引号创建的字符串对象,在字符串常量池中储存,通过构造方法创建的字符串对象,在堆内存中存储
String  s1="abc";
String  s2="ab";
String  s3=s2+"c";
System.out.print(s1==s3);//false
当字符串之间使用+串联的时候,系统底层会自动创建一个StringBudiler对象
然后再调用其append方法完成拼接
拼接后,再调用其toString方法转换为String类型
String  s1="abc";
String  s2="a"+"b"+"c";
System.out.print(s1==s2);//true
java存在常量优化机制,在编译的时候,会将"a"+"b"+"c"拼接为"abc"
刚刚是变量s2+字符串
字符串的比较
使用==作比较
基本类型:比较的是数据值是否相同
引用类型:比较的是地址值是否相同
字符串是对象,它比较内容是否相同,是通过一个方法来实现的,equals()
public class test {
    public static void main(String[] args) {
        String s1="abc";
        String s2="abc";
        String s3="ABC";
        System.out.println(s1.equals(s2));//true
        System.out.println(s1.equals(s3));//false
    }
}
如果想忽略大小写使用equalsIgnoreCase这个方法  和equals使用一样 大家下去练习一下
例如生活中的短信验证 就是忽略大小写
现在可以实现一个案例  
已知用户名和密码  请用程序模拟用户登陆,总共三次机会,登陆只会给出相应的提示
思路:定义已知的用户和密码,定义两个字符串即可
    键盘录入要登陆的用户名和密码,用Scanner实现
    拿键盘录入的用户名,和已知的密码进行比较,使用equals
    用循环实现多次机会,次数明确,并在登陆成功的时候,使用break结束循环
    public class test {
    public static void main(String[] args) {
      Scanner s=new Scanner(System.in);
        String adm="abc";
        String password="123";
        for (int i = 0; i <3; i++) {
            System.out.println("请输入账号");
            String s1 = s.nextLine();
            System.out.println("请输入密码");
            String s2 = s.nextLine();
            if(s1.equals(adm)&&s2.equals(password)){
                System.out.println("恭喜您成功进入");
                break;
            }else {
                if(i==3){
                    System.out.println("您的三次登陆机会已经用完");
                }
                System.out.println("您输入有误,还剩"+(3-i)+"次机会");
            }
        }
    }
    案例:键盘录入一个字符串,遍历字符串
    方法:charAt返回指定索引的char值,字符串的索引也是从0开始的
          length()  返回的此字符串的长度,数组的长度 数组名.length  字符串的长度  字符串对象.length()
          public class test {
    public static void main(String[] args) {
      Scanner s=new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String s1 = s.nextLine();
        for (int i = 0; i < s1.length(); i++) {
            char c = s1.charAt(i);
            System.out.println(c);
        }
    }
}
}

第二中方法
toCharArray():将当前字符串拆分为字符数组并返回  遍历数组
public class test {
    public static void main(String[] args) {
      Scanner s=new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String s1 = s.nextLine();
        char[] chars = s1.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }
    }
}

案例:键盘录入字符串,统计该字符中大写字母小写字母,数字字符出现的字数(不考虑其他的字符类型)
public class test {
    public static void main(String[] args) {
      Scanner s=new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String s1 = s.nextLine();
        int ENGLISH=0;
        int english=0;
        int number=0;
        char[] chars = s1.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if ('A'<= chars[i]&&chars[i]<='Z'){
                ENGLISH++;
            }else if ('a'<= chars[i]&&chars[i]<='z'){
                english++;
            }else if ('0'<= chars[i]&&chars[i]<='9'){
               number++;
            }
        }
        System.out.println("大写字符"+ENGLISH+"小写字符"+english+"数字字符"+number);
    }
}
字符 azAZ有对应的码值 0-9(48-57) a-z(97-122) A-Z(65-90)
手机号的屏蔽  中间四位进行加密
String substring(int beginIndex)  从传入的索引位置处,向后截取,一直截取到末尾,得到新的字符串并返回
String substring(int beginIndex,int endIndex) 从beginIndex索引位置开始截取,截取到endIndex索引位置,得到新字符串并返回(包含开头,不包含结尾)
public class test {
    public static void main(String[] args) {
      Scanner s=new Scanner(System.in);
        System.out.println("请输入一个十一位的号码");
        String s1 = s.nextLine();
        
        if (s1.length()==11){
            String start = s1.substring(0, 3);
            String end = s1.substring(7);
            System.out.println(start+"****"+end);
        }else{
            System.out.println("您输入的有误");
        }
    }
}
有bug  比如第一次输入错误  给出提示 不知道用那个循环进入第二输入号码环节
案例:
键盘录入一个字符串 如果字符串中有侮辱人的字符使用**替换比如TMD
String replace(CharSequence targe,CharSequence replacement)
将当前字符串中的targe (被替换的旧值) 使用replacement(替换的新址)进行替换
public class test {
    public static void main(String[] args) {
      Scanner s=new Scanner(System.in);
        System.out.println("请输入字符串");
        String s1 = s.nextLine();
        String tmd = s1.replace("TMD", "***");
        System.out.println(tmd);
    }
}
案例:
切割字符串
String.split 根据传入的规则,得到字符串数组
自己动手坐一坐  明天附答案

StringBuilder概述
StringBuilder是一个可变的字符串类,我们可以把他看作一个容器
作用:提高字符串的效率 
常用方法  
StringBuilder.append 添加数据,并返还数据本身
StringBuilder.reverse 返回相反的字符序列
StringBuilder.length  返回长度(字符出现的个数)
StringBuilder.toString  通过toString就可以实现把StringBuilder转换位String
自己可以试试

举报

相关推荐

0 条评论