Java开发从入门到精通(十):Java常用的API编程接口:String

(一)Java常用的API

1.1 什么是API

API(全称 Application Programming Interface:应用程序编程接口),就是别人写好的一些程序,给咱们程序员直接拿去调用即可解决问题的。

为什么要学别人写好的程序?

  • 不要重复造轮子
  • 开发效率高!

Java提供了哪些API给咱们使用呢?

  • JAVA的开发手册就集中介绍了这个API,但是不是所有的API都要学

在这里插入图片描述

1.2 什么叫做包

JAVA的开发手册中涉及的程序都是各种程序的包,那什么是包呢?

  • 包是用来分门别类的管理各种不同程序的,类似于文件夹,建包有利于程序的管理和维护。

建包的语法格式:
在这里插入图片描述
在这里插入图片描述

1.2.1 如何调用其他包的程序

在自己程序中调用其他包下的程序的注意事项:
如果当前程序中,要调用自己所在包下的其他程序,可以直接调用。(同一个包下的类,互相可以直接调用)
如果当前程序中,要调用其他包下的程序,则必须在当前程序中导包,才可以访问!导包格式:import 包名.类名
如果当前程序中,要调用lava提供的程序,也需要先导包才可以使用;但是ava.lang包下的程序是不需要我们导包的,可以直接使用。
如果当前程序中,要调用多个不同包下的程序,而这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问。

package com.qianxin.bao;
import com.qianxin.bao.demo1.Demo;
import com.qianxin.bao.demo1.Test;
import java.util.Random;
import java.util.Scanner;
/**
 目标:掌握如何在自己的程序中调用其他包下的程序,有哪些注意事项。
 */

public class Testpkg {

    public static void main(String[] args) {


    // 1、同一个包下的程序,可以直接访问。
    Demo3 d = new Demo3();
    d.print();

    // 2、访问其他包下的程序,必须导包才可以访问。
    Demo d2 = new Demo();
    d2.print();

    //3、自己的程序中调用Java提供的程序,也需要先导包才可以使用;注意:Java.lang包下的程序是不需要我们导包的,可以直接使用。
    Scanner sc = new Scanner(System.in);
    String s = "黑马";
    Random r = new Random();

    //4、访问多个其他包下的程序,这些程序名又一样的情况下,默认只能导入一个程序,另一个程序必须带包名和类名来访问。
    Demo d3 = new Demo();
    d3.print();

    com.qianxin.bao.demo2.Demo d4 = new com.qianxin.bao.demo2.Demo();
    d4.print();
    }

}

1.3 JAVA的API:String

为什么要学字符串的处理呢?

  • 验证密码 百度搜索 都是用我们输入的东西去查找搜索相关内容是否存在

在这里插入图片描述
java.lang.String 代表字符串 封装字符串数据 处理字符串的方法步骤:

  • 1、创建对象
  • 2、封装字符串数据
  • 3、调string的方法

1.3.1 创建String对象

String创建对象封装字符串数据的方式

  • 方式一:Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。
String name="小黑";
String schoolName="黑马程序员";
  • 方式二:调用String类的构造器初始化字符串对象

在这里插入图片描述

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

        // 目标:掌握创建String对象,并封装要处理的字符串的两种方式
        // 1、直接双引号得到字符串对象,封装字符串数据
        String name ="itheima";
        System.out.println(name);

        // 2、new String创建字符串对象,并调用构造器初始化字符串
        String rs1= new String();
        System.out.println(rs1);

        String rs2 = new String( "itheima");
        System.out.println(rs2);

        char[] chars = {'a','黑','马'};
        String rs3 = new String(chars);
        System.out.println(rs3);

        byte[] bytes ={97,98,99};
        String rs4 = new String(bytes);
        System.out.println(rs4);
    }
}

1.3.2 String提供的操作字符串数据的常用方法

只学习常用的这几个即可
在这里插入图片描述

package com.qianxin.bao.String;

public class StringDemo1 {
    public static void main(String[] args){
        // 目标:快速熟悉String提供的处理字符串的常用方法。
        String s="黑马Java";

        // 1、获取字符串的长度
        System.out.println(s.length());

        // 2、提取字符串中某个索引位置处的字符
        char c=s.charAt(1);
        System.out.println(c);

        // 3、字符串的遍历
        for(int i=0;i<s.length();i++) {
            //i=012345
            char ch = s.charAt(i);
            System.out.println(ch);
        }
        System.out.println("--------------------");

        //4、把字符申转换成字符数组,再进行遍历
        char[] chars =s.toCharArray();
        for(int i=0;i<chars.length; i++){
            System.out.println(chars[i]);
        }

        // 4、判断字符串内容,内容一样就返回true
        String s1 = new String( "黑马");
        String s2 = new String( "黑马");
        System.out.println(s1 == s2);// false
        System.out.println(s1.equals(s2));//true

        //5、忽略大小写比较字符串内容
        String c1="34AeFG";
        String c2 ="34aEfg";
        System.out.println(c1.equals(c2));//false
        System.out.println(c1.equalsIgnoreCase(c2));//true

        //6、截取字符串内容(包前不包后的)
        String s3 ="Java是最好的编程语言之一";
        String rs = s3.substring(0,8);
        System.out.println(rs);

        // 7、从当前索引位置一直截取到字符串的末尾
        String rs2 =s3.substring(5);
        System.out.println(rs2);

        //8、把字符串中的某个内容替换成新内容,并返回新的字符串对象给我们
        String info ="这个电影简直是个垃圾,垃圾电影!!";
        String rs3=info.replace( "垃圾","**");
        System.out.println(rs3);

        //9、判断字符串中是否包含某个关键字
        String info2 ="Java是最好的编程语言之一,我爱Java,Java不爱我!";
        System.out.println(info2.contains("Java"));
        System.out.println(info2.contains("java"));
        System.out.println(info2.contains("Java2"));

        // 10、判断字符串是否以某个字符串开头。
        String rs4 ="张三丰";
        System.out.println(rs4.startsWith("张"));
        System.out.println(rs4.startsWith("张三"));
        System.out.println(rs4.startsWith("张三2"));

        // 11、把字符串按照某个指定内容分割成多个字符串,放到一个字符串数组中返回给我们
        String rs5 ="张无忌,周芷若,殷素素,赵敏";
        String[] names = rs5.split(",");
        for(int i=0;i<names.length;i++){
            System.out.println(names[i]);
        }
    }
}

String注意事项
在这里插入图片描述
String注意事项1:String的对象是不可变字符串对象

  • 注意:只要是以“…”双引号方式写出的字符串对象,会在堆内存中的字符串常量池中存储。

public class StringDemo2 {
    public static void main(String[] args) {
        // 目标:搞清楚String使用时的几个注意事项。
        // 1、String的对象是不可变的???
        String name ="黑马";
        name +="程序员";//name = name +“程序员”
        name +="播妞";
        System.out.println(name);
    }
}

在这里插入图片描述

结论:每次试图改变字符串对象实际上是新产生了新的字符串对象了,变量每次都是指向了新的字符串对象,之前字符串对象的内容确实是没有改变的,因此说String的对象是不可变的。

String的第二点注意事项:

public class StringDemo2 {
    public static void main(String[] args) {
        // 目标:搞清楚String使用时的几个注意事项。
        // 1、String的对象是不可变的???
        String name ="黑马";
        name +="程序员";//name = name +“程序员”
        name +="播妞";
        System.out.println(name);

        //2、只要是以双引号给出的字符串对象,存储在常量池中,而且内容相同时只会存储一份
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1 == s2);

        // 3、new String创建字符串对象,每次new出来的都是一个新对象,放在堆内存中
        char[] chars = {'a','b','c'};
        String a1 = new String(chars);
        String a2 = new String(chars);System.out.println(a1 == a2);
    }
}
黑马程序员播妞
true
false

在这里插入图片描述
Java为什么只要是以双引号给出的字符串对象,存储在常量池中,而且内容相同时只会存储一份?

  • 节约内存

通过new构造器得到字符串对象
在这里插入图片描述
阅读程序并回答问题:
在这里插入图片描述
阅读下面的两个程序,请写出程序打印的结果是多少

  • Java存在编译优化机制,程序在编译时:会直接转成“abc”,以提高程序的执行性能

在这里插入图片描述

1.3.3 String练习案例

需求:
系统正确的登录名和密码是:itheima/123456,请在控制台开发一个登录界面,接收用户输入的登录名和密码,判断用户是否登录成功,登录成功后展示:“欢迎进入系统!",即可停止程席(注意:要求最多给用户三次登录机会)
在这里插入图片描述

import java.util.Scanner;

public class TestString {
    public static void main(String[] args) {
        int i = 0;
        String name ="itheima";
        String pass = "123456";
        while (i < 3){
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入账号和密码");
            String name1 = sc.next();
            String pass1 = sc.next();
            if (name1.equals(name) & pass1.equals(pass)){
                System.out.println("登陆成功!!!");
                break;

            }else {
                System.out.println("登陆失败!!!");
            }
            i++;
        }
    }
}
import java.util.Scanner;

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

        for (int i = 0; i < 3; i++) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请您输入登录名称:");
            String loginName = sc.next();
            System.out.println("请您输入登录密码:")
            ;
            String passWord = sc.next();
            //5、开始调用登录方法,判断是否登录成功
            boolean rs = login(loginName, passWord);
            if (rs) {
                System.out.println("恭喜您,欢迎进入系统~~");
                break;//跳出for循环,代表登录完成
            } else {
                System.out.println("登录名或者密码错误,请您确认~~");
            }

        }
    }
    public static boolean login(String loginName,String passWord){
        // 3、准备一份系统正确的登录名和密码
        String okLoginName = "itheima";
        String okPassWord="123456";
        //4、开始正式判断用户是否登录成功
        if(okLoginName.equals(loginName) && okPassWord.equals(passWord)){
            // 登录成功的
            return true;
        }else {
            return false;
        }
    }
}
1、字符串的比较使用  ==比较好吗? 为什么? 什么时候使用==?
● 不好,对于字符串对象的比较,==比较的是地址,容易出业务bug
● 基本数据类型的变量或者值应该使用==比较,
2、开发中比较字符串推荐使用什么方式比较?
使用String提供的equals方法,它只关心字符串内容一样就返回true。
  • 34
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HACKNOE

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

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

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

打赏作者

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

抵扣说明:

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

余额充值