API之Scanner类和String类常见方法

1. API(Application Programming Interface)

Java API:JDK中提供的各种功能的java类,这些类将底层的实现封装起来,我们不需要关心这些类是如何实现的,只需要掌握如何使用这些类即可。学习API我们可以使用帮助文档。

2. API------Scanner类

 /*
    *       next(): 遇到空格就不再输入
    *       结束标志:空格、tab键
    *
    *       nextLine(): 可以接收完整数据
    *       结束标志:回车键
    *       nextInt()+nextLine()一起使用时会导致nextLine没有录入机会
    *
    * */
    public static void main(String[] args) {
        System.out.println("请输入:");
        Scanner sc = new Scanner(System.in);
        String s = sc.next();//输入abc 122
        System.out.println(s);//输出abc遇到空格结束输入

        System.out.println("请输入:");
        int a = sc.nextInt();//输入一个数字+回车
        String s1 = sc.nextLine();//无法录入

    }

3. API------String类

  • String概述:
/*
    *       String类在 java.lang包下,使用时不需要导包
    *       Java程序中的所有字符串文字(例如"abc" )都实现为String类的实例(对象)。
    *       Java字符串是不变的,它们的值在创建后无法更改。
    *       字符串在常量池中是共享的
    *
    * */

    public static void main(String[] args) {
        String s = "asdf";
        int l = s.length();//s可以调用length方法,s为String的对象

        s = "abc";//s字符串没有改变,只是让s记录了一个新变量
        System.out.println(s);
    }
  • String常见构造方法:
 /*
    *      public String() 创建一个空白的 String对象,不包含任何内容。
    *      String​(char[] value) 根据传入的字符数组的内容,创建String对象。
    *      String​(String original) 根据传入的字符串内容,创建String对象
    *      String s = "abc"  直接使用赋值方式创建String对象
    *
    *       String这个类比较特殊,打印他的对象名的时候不会出现内存地址,
    *       而是该对象所记录的真实内容(继承、object类)
    *
    * */

    public static void main(String[] args) {

        // public String() 创建一个空白的 String对象,不包含任何内容。
        String s1 = new String();
        System.out.println(s1);
        //String​(char[] value) 根据传入的字符数组的内容,创建String对象。
        char[] c = {'a', 'b', 'c'};
        String s2 = new String(c);
        System.out.println(s2);
        //String​(String original) 根据传入的字符串内容,创建String对象
        String s3 = new String("asd");
        System.out.println(s3);
        //String s = "abc"  直接使用赋值方式创建String对象
        String s4 = "zxc";
        System.out.println(s4);
    }
  • 通过new创建字符串和双引号创建字符串区别:

 以" "给出的字符串,只要字符串序列相同(顺序和大小写),无论在代码中出现几次,JVM都只会创建一个String对象,并在字符串常量池中维护(地址相同)。

字符串常量池:使用双引号创建字符串对象时,系统会检查该字符串是否在字符串常量池中存在,存在则直接复用,不存在则创建。(JDK7开始字符串常量池位置从方法区挪到了堆内存)

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

  • String常见面试题:

当字符串之间使用 + 号串联的时候,系统底层会自动创建一个StringBuilder对象,然后再调用其append方法完成拼接,拼接后再调用toString方法转换为String类型 。

public static void main(String[] args){
        String s1 = "abc";//地址在字符串常量池
        String s2 = "ab";
        String s3 = s2 + "c";//StringBuilder在堆内存开辟空间完成拼接,再toString转换为String对象开辟一个新空间

        System.out.println(s1 == s3);//输出false
    }

Java存在常量优化机制,在编译时就会将 "a" + "b" + "c" 拼接为 "abc",所以下面代码的结果为true

 public static void main(String[] args){
        String s1 = "abc";
        String s2 = "a" + "b" + "c";
        System.out.println(s1 == s2);//输出true
    }
  • 字符串的比较:
public static void main(String[] args){
        String s1 = "abc";
        String s2 = "ABC";
        String s3 = "abc";

        System.out.println(s1.equals(s2));//false
        System.out.println(s1.equals(s3));//true
        //忽略大小写的比较,验证码校验可以使用
        System.out.println(s1.equalsIgnoreCase(s2));//true
    }
  •  字符串的遍历:
public static void main(String[] args){
        System.out.println("请输入一个字符串:");
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        //​​​​​​​public char charAt(int index):返回指定索引处的char值
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            System.out.println(c);
        }
        //public char[] toCharArray():将当前字符串拆分为字符数组并返回
        char[] c = s.toCharArray();
        for (int i = 0; i < c.length; i++) {
            System.out.println(c[i]);
        }
    }
  • 字符串的截取:​​​​​​​
/*
    *   截取字符串:
    *       String substring(int beginIndex)
    *           从传入的索引位置开始截取,一直截取到末尾,返回新的字符串
    *
    *       String substring(int beginIndex, int endIndex)
    *           从beginIndex截取到endIndex,返回新字符串,包含头不包含尾
    *
    * */
    public static void main(String[] args){
        //以字符串的形式从键盘接收手机号,将中间4位号码屏蔽
        //最终效果为:156****1234
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入11位电话号码:");
        String s = sc.nextLine();
        String s1 = s.substring(0, 3);
        String s2 = s.substring(7);
        System.out.println(s1 + "****" + s2);
    }
  •  字符串的替换:
 /*
    *   替换字符串:
    *       String replace(CharSequence target, CharSequence replacement)
    *       将当前字符串target的内容,使用replacement替换,返回一个新字符串
    * */
    public static void main(String[] args){
        //键盘录入一个字符串,如果字符串中包含TMD,使用***替换
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = sc.nextLine();
        String res = s.replace("TMD", "***");
        System.out.println(res);
    }
  • 字符串的切割:
public static void main(String[] args) {
        //从键盘录入学生信息,切割出有效信息,封装为学生对象
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生信息:");
        String m = sc.nextLine();
        String[] sArray = m.split(" ");//以空格分隔字符串
        int age = Integer.valueOf(sArray[2]);//将Sting类型转换为int
        Student stu = new Student(sArray[0], sArray[1], age);
        System.out.println(stu.getName() + "学号:" + stu.getNum());
        System.out.println(stu.getName() + "年龄:" + stu.getAge());
    }

 

如有错误欢迎留言评论,及时更正。 5月16日  羽露风 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽露风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值