2.字符串

API

1.1 API概述

API(Application Programming Interface):应用程序编程接口
编写一个机器人程序去控制机器人踢足球,程序需要向机器人发出向前跑、向后跑、射门、抢球等名种命令。机器人厂商一定会提供一些用于控制机器人的接口类,这些类中定义好了操作机器人各种动作的方法。其实,这些接口类就是机器人厂商提供给应用程序编程的接口,大家把这些类称为API

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

返回上一步 Ctrl+z

1.2, JAVA API文档的使用
  • 右键打开该文档

    image-20211014060051291

    • 找到索引选项卡中的输入框

    image-20211014060105489

  • 在输入框中输入;如random

image-20211014060121581

  • 看类在哪个包

    image-20211014060133669

  • 看类的描述

    image-20211014060200950

  • 看构造方法

    image-20211014060215830

    • 看成员方法

    image-20211014060232884

1.3 API使用练习

需求:按照帮助文档的使用步骤学习Scanner类的使用,并实现键盘录入一个字符串,最后输出在控制台

Ctrl+Alt+V(快速输出)

package com.ithema05;

import java.util.Scanner;

public class scannerDemo {
    public static void main(String[] args) {
        //创建对象
        Scanner sc =new Scanner(System.in);
        //接收数据
        System.out.println("scanner一个数");
        //String ling=sc.nextLine();
        //Ctrl+Alt+V(快速输出)
        String line = sc.nextLine();
        //输出结果
        System.out.println("你输入的数据是"+line);
    }

}

image-20211014060307038

String

2.1 String概述

String类在java.lang包下,所以使用的时候不需要导包
String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都被实现为此类的实例也就是说==,Java程序中所有的双引号字符串,都是String类的对象==

字符串的特点
字符串不可变,它们的值在创建后不能被更改
虽然String的值是不可变的,但是它们可以被共享
字符串效果上相当于字符数组( char[),但是底层原理是字节数组( byte[])

2.2 String构造方法
public String()创建—个空白字符串对象,不含有任何内容
String s = “abc” ;直接赋值的方式创建字符串对象,内容就是abc
public String(char[] chs)根据字符数组的内容,来创建字符串对象
public String(byte[] bys)根据字节数组的内容,来创建字符串对象

例;

package com.ithema06;
/*
String构造方法;
public String():创建一个空白字符串对象,不含有任何内容
public String(char[] chs):根据字符数组的内容,来创建字符串对象
public String(byte[] bys):根据字节数组的内容,来创建字符串对象
String s = “abc”;直接赋值的方式创建字符串对象,内容就是abc
*/

public class StringDemo {
    public static void main(String[] args) {
        //public String():创建一个空白字符串对象,不含有任何内容
        String s1 = new String();
        System.out.println("s1"+s1);
       // public String(char[] chs):根据字符数组的内容,来创建字符串对象
        char[] chs={'a','b','c'};
        String s2 = new String(chs);
        System.out.println(s2);
       // public String(byte[] bys):根据字节数组的内容,来创建字符串对象
        byte[] chs2={97,98,99};
        String s3= new String(chs2);
        System.out.println(s3);
//String s = “abc”;直接赋值的方式创建字符串对象,内容就是abc
        String s4="abc";
        System.out.println(s4);
    }
}

image-20211014060325994

2.3 String对象的特点

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

2)以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护

string s3 = " abc" ;

string s4 = " abc" ;

在上面的代码中,针对第一行代码,JVM会建立一个String对象放在字符串池中,并给s3参考;第二行则让s4直接参考字符串池中的String对象,也就是说它们本质上是同一个对象

image-20211014060345408

2.4字符串的比较使用==做比较

基本类型:比较的是数据值是否相同

引用类型:比较的是地址值是否相同

字符串是对象,它比较内容是否相同,是通过一个方法来实现的,这个方法叫: equals()

package com.ithema06;
/*
使用==.做比较;
        基本类型,比较的是数据值是否相同引用类型:比较的是地址值是香相同
        pubLic booLean equals (Object anObject):
        将此字符串与指定对象进行比较。由于我们比较的是字符串对象,所以参数直接传递一个字符串
*/

public class StringDemo2 {
    public static void main(String[] args) {
        char[] chs={'a','b','c'};
        String s1=new String(chs);
        String s2=new String(chs);
        //直接赋值的方式得到对象
        String s3="abc";
        String s4="abc";

        //比较字符串对象地址是否相同
        System.out.println(s1==s2);
        System.out.println(s1==s3);
        System.out.println(s3==s4);
        System.out.println("---------");

        比较字符串内容是否相同
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
        System.out.println(s1.equals(s4));
    }

}

image-20211014060402241

例题;用户登录

package com.ithema07;
/*
需求:
        已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示思路:
        1:已知用户名和密码,定义两个字符串表示即可
        2:键盘录八要登录的用户名和密码,用Scanner实现
        3:拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。字符串的内容比较,用equals()方法实现4 :用循环实现多次机会,这里的次数明确,采用for循环实现,并在登录成功的时候,使用break结束循环
*/

import java.util.Scanner;

public class StringText {
    public static void main(String[] args) {
        //1:已知用户名和密码,定义两个字符串表示即可
        String username = "woshiba";
        String password = "nishiwa";

        for (int i = 0;i<3; i++){
            //  2:键盘录八要登录的用户名和密码,用Scanner实现
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入用户名");
            String name = sc.nextLine();
            System.out.println("请输入密码");
            String paw = sc.nextLine();

            if (name.equals(username) && paw.equals(password)) {
                System.out.println("登录成功");
                break;
            } else {
                System.out.println("登录失败,你还有"+(2-i)+"次机会");

            }
        }
    }
}

例题;遍历字符串

package com.ithema08;
/*需求。
        键盘录入一个字符串,使用程序实现在控制台遍历该字符串
        思路:
        1 :键盘盘录入一个字符串,用Scanner实现
        2:遍历字符串,首先要能够获取到字符串中的每一个字符
        public char charAt (int index):返回指定索引处的char值,
        字符串的索引也是从0开始的
       3:遍历字符串,其次要能够获取到字符串的长度public int Length() :返回此字符串的长度
       数组的长度:
        数组名.Length
        字符串的长度:字符串对象.Length()
        4:遍历字符串的通用格式*/

import java.util.Scanner;

public class StringText02 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String line=sc.nextLine();
        /*2:遍历字符串,首先要能够获取到字符串中的每一个字符
        System.out.println(line.charAt(0));
        //System.out.println(line.charAt(1));
       // System.out.println(line.charAt(2));*/
        for (int i=0;i<line.length();i++){
            System.out.println(line.charAt(i));
        }
    }

}

public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的

例题;统计字符次数

需求:键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)

假如ch是一个字符,我要判断它属于大写字母,小写字母,还是数字,直接判断该字符是否在对应的范围即可

package com.ithema09;

import java.util.Scanner;

public class SeringTest04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String line = sc.nextLine();
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;
        for (int i = 0; i < line.length(); i++) {
            char ch = line.charAt(i);
            if (ch >= 'A' && ch <= 'Z') {
                bigCount++;
            } else if (ch >= 'a' && ch <= 'z') {
                smallCount++;
            } else if (ch >= '0' && ch <= '9') {
                numberCount++;
            }}
            System.out.println("大写字母"+bigCount);
            System.out.println("xiao小写"+smallCount);
            System.out.println("数字"+numberCount);
        }
    }

例题;拼接字符串

需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。例如,数组为int[arr = {1,2,3};,执行方法后的输出结果为:[1,2,3]

package com.ithema10;

public class StringTest05 {
    public static void main(String[] args) {
        int[] arr ={1,2,3};
        //调用方法
        String s= arrayToString(arr);
        System.out.println("s;"+s);
    }

public static String arrayToString(int[] arr){
        String s="";
        s +="[";
        for (int i=0;i<arr.length;i++){
            if(i==arr.length-1){
                s+=arr[i];
            }else {
                s+=arr[i];
                s+=",";
            }

        }
        s+="]";
        return s;
    }



}

例题;字符串反窜

package com.ithema10;

import java.util.Scanner;

public class StringTest05 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);

        System.out.println("请输入一个字符串");
        String line = sc.nextLine();
        String s=arrayToString(line);
        System.out.println(s);
    }

public static String arrayToString(String s){
        String ss="";
      
        for (int i=s.length()-1;i>=0;i--){
          ss+=s.charAt(i);
            }
return ss;


    }



}

StringBuilder

3.1 StringBuilder概述

image-20211014060421730

如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费内存空间,而这种操作还不可避免。那么有没有一种比较好的方式可以解决这个问题呢?答案是肯定的,我们可以通过Java提供的StringBuilder类就来解决这个问题。

StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器这里的可变指的是StringBuilder对象中的内容是可变的

3.2 StringBuilder构造方法
public StringBuilder()创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象
public class StringBuilderDemoe1 {
public static void main(string[] args) {
/ / public stringBuiLder(),创建一个空白可变字符串对象,不含有任何内容

StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb);
System.out.println("sb.length():" + sb.length());
/ / public StringBuiLder(String str)。根据字符串的内容,来创建可变字符串对

StringBuilder sb2 = new stringBuilder( "he1lo");
System.out.println("sb2:" + sb2);
System.out.println("sb2.1ength();" + sb2.length());
}

}
3.3 StringBuilder的添加和反转方法
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相反的字符序列
//StringBuilder的添加和反转方法
//public StringBuiLder append(任意类型):添加数据,并返回对象本身

//public StringBuiLder reverse():返回相反的字符序列
public class StringBuilderDemo01 {
public  static void main(String[] args) {
//创建对象
StringBuilder sb = new StringBuilder();
/ / public StringBuilder append(任意类型):添加数据,并返回对象本身
  stringBuiLder sb2 = sb.append( "hello" ) ;

System.out.printLn( "sb:+ sb); .

System .out.printLn( "sb2:+sb2);

System.out.printLn( sb == sb2);
//sb .append ( "heLlo");

//sb.append ( "worLd" );

//sb .append( "java" );

//sb . append( 100) ;

//链式编程
sb.append("he1lo" ).append(""wor1d").append("java").append(100);
System.out.println("sb:" + sb);
)
 // public StringBuiLder reverse():返回相反的字符序列sb.reverse();
System.out.print1n( "sb:" + sb);
                    }
              }

image-20211014060441023

3.4 StringBuilder和String相互转换

因为StringBuilder有append(), reverse(),所以有时候可以String转化去用。

1.StringBuilder转换为String
public String toString(): 通过toString()就可以实现把StringBuilder转换为String
2.String 转换为StringBuilder
public StringBuilder(String s): 通过构造方法就可以实现把String转换为StringBuilder

image-20211014060502260

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值