Java String、ArrayList(API)

目录

一.APl(Application Programming Interface,应用程序编程接口)

二.String

        1.string类概述

        2.string类创建对象的2种方式string类常见面试题

       

3.String类常用API-字符串内容比较

        4.String类常用API-遍历、替换、截取、分割操作

        5.string类案例实战

三.ArrayList简单介绍

1.集合概述

2.ArrayList集合快速入门

3.ArrayList对泛型的支持

4.ArrayList常用API、遍历

5.ArrayList集合案例:遍历并删除元素

6.ArrayList集合案例:存储自定义类型的对象

7.ArrayList集合案例:元素搜索


一.APl(Application Programming Interface,应用程序编程接口)

        1.Java写好的技术(功能代码),咱们可以直接调用。

        2.Oracle也为Java提供的这些功能代码提供了相应的API文档(技术使用说明书

下载API文档:http://www.oracle.com/technetwork/java/javase/downloads/index.htmlhttp://www.oracle.com/technetwork/java/javase/downloads/index.html

String简单介绍

        String类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用。

二.String

        1.string类概述

String概述

        java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。

        Java程序中的所有字符串文字(例如“abc”)都为此类的对象。

String name = "小H";
String schoolName ="公主真好看";

String类的特点详解

        String其实常被称为不可变字符串类型,它的对象在创建后不能被更改

package com.wjh.String;
/*
    目标:了解String类的特点:String不可变的原理
 */

public class StringDemo1 {
    public static void main(String[] args) {
        String name = "喂";
        name += "言西";   //name=name+"言希";
        name += "你好呀";
        System.out.println(name);//喂言西你好呀

    }
}

字符串对象存在哪里?

        以""方式给出的字符串对象,在字符串常量池中存储。

 

        2.string类创建对象的2种方式string类常见面试题

创建字符串对象的2种方式

        方式一:直接使用“”定义。(推荐方式)

String name ="公主真好看";

        方式二:通过String类的构造器创建对象。

package com.wjh.String;
/*
    目标:String类创造字符串对象的2中方式
 */

public class StringDemo1 {
    public static void main(String[] args) {
        //方式一:直接使用双引号得到字符串对象
        String name = "言希西";
        System.out.println(name);

        //方式二:
        //public String();创建一个空白字符串对象,不含有任何内容(几乎不用)
        String s1 = new String();   //s1 = " ";
        System.out.println(s1);

        //public String(String); 根据传入的字符串内容,来创建字符对象(几乎不用)
        String s2 = new String("想见见你");
        System.out.println(s2);

        //public String(char[] c);根据字符数组的内容,来创建字符串对象
        char[] chars = {'我','l','k','你'};
        String s3 = new String(chars);
        System.out.println(s3);

        //public String(byte[] b);根据字节数组的内容,来创建字符串对象
        byte[] bytes = {97,98,99,65,66,67};
        String s4 = new String(bytes);
        System.out.println(s4);

        System.out.println("----------------------");
    }
}
言希西

想见见你
我lk你
abcABC
----------------------

有什么区别吗?(面试常考)

        以" "方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。

        

package com.wjh.String;
public class StringDemo1 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "a"+"b"+"c";
        //String s3 = "c";
        System.out.println(s1 == s2);   //true

        System.out.println("----------------");

        String s = "abc";
        String s3 = "ab";
        String s4 = s2+"c";
        System.out.println(s == s4);       //false
    }
}

        

       

3.String类常用API-字符串内容比较

字符串的内容比较

package com.wjh.String;

import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        //1.正确登录名和密码
        String UserName = "steerink";
        String password = "123456";

        //2.请您输入登入名称和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入账号名称:");
        String name = sc.next();
        System.out.println("请输入账号密码:");
        String pass = sc.next();

        //3.判断用户输入的登入名称与正确的内容是否相等
        if(UserName == pass && password == pass){
            System.out.println("登入成功!");
        }else{
            System.out.println("登入失败,账号或密码有误!");
        }

    }
}

结论:字符串的内容比较不适合用“==”比较

字符串的内容比较:

        推荐使用String类提供的“equals”比较:只关心内容一样即可

package com.wjh.String;

import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        //1.正确登录名和密码
        String UserName = "steerink";
        String password = "123456";

        //2.请您输入登入名称和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入账号名称:");
        String name = sc.next();
        System.out.println("请输入账号密码:");
        String pass = sc.next();

        //3.判断用户输入的登入名称与正确的内容是否相等
        if(UserName.equals(name) && password.equals(pass)){ 
            /*
            if不能判断 定义字符串值 和 输入字符串值 的比较,因为 定义字符串值
            是存储在堆内存当中,而 输入字符串值 是存储在栈内存当中,两者的地址不一样
            定义字符串值 == 输入字符串值 ---换成--> 定义字符串值.equals(输入字符串值)
             */
            System.out.println("登入成功!");
        }else{
            System.out.println("登入失败,账号或密码有误!");
        }

        //4.忽略比较内容的API:一般用于比较验证码这样的业务逻辑
        String okCode = "FH4i5j";
        String code = "fh4I5j";

        System.out.println(okCode.equalsIgnoreCase(code));    //定义字符串值.equalsIgnoreCase(输入字符串值):意为忽略大小写 //true

    }
}

        4.String类常用API-遍历、替换、截取、分割操作

String常用API

package com.wjh.String;

import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        // 1、public int length():获取字符串的长度
        String name = "我爱你中国love";
        System.out.println(name.length());      //9

        // 2、public char charAt(int index):获取某个索引位置处的字符
        System.out.println(name.charAt(1));     //索引        //爱

        System.out.println("---------遍历字符串中的每个字符--------");
        for (int i = 0; i < name.length(); i++) {
            char ch = name.charAt(i);
            System.out.println(ch);

        }
        System.out.println("------");

        // 3、public char[] toCharArray(): :把字符串转换成字符数组
        char[] chars = name.toCharArray();
        for (int i = 0; i < name.length(); i++) {
            System.out.println(chars[i]);
        }
        System.out.println("--------");

        // 4、public string substring(int beginIndex, int endIndex):截取内容包,前不包后的
        String name2 = "Java是最厉害的编程语言不接受反驳";
        String rs = name2.substring(4, 9);
        System.out.println(rs);

        // 5、public String substring(int beginIndex):从当前索引一直截取到末尾
        String rs1 = name2.substring(4);
        System.out.println(rs1);

        // 6、public String replace(CharSequence target,CharSequence replacement)
        String name3 = "希希子是最好看的公主,永远热爱!永远热泪!";
        String rs3 = name3.replace("永远","**");
        System.out.println(rs3);


        // 7、public boolean contains(CharSequence s)
        System.out.println(name3.contains("永远"));

        // 8、public boolean startsWiths(String prefix)
        System.out.println(name3.startsWith("希"));

        // 9、 public String[] split(String s):按照某个内容把字符串分割成字符串数组返回。
        String name4 = "希希子,言希,U.";
        String[] names = name4.split(",");
        for (int i = 0; i < names.length; i++) {
            System.out.println("喂言希关注了:"+names[i]);

        }

    }
}
9
爱
---------遍历字符串中的每个字符--------
我
爱
你
中
国
l
o
v
e
------
我
爱
你
中
国
l
o
v
e
--------
是最厉害的
是最厉害的编程语言不接受反驳
希希子是最好看的公主,**热爱!**热泪!
true
true
喂言希关注了:希希子
喂言希关注了:言希
喂言希关注了:U.

        5.string类案例实战

package com.wjh.String;

/*
    练习题:使用String完成随机生成5位的验证码。
 */

import java.util.Random;

public class StringDemo1 {
    public static void main(String[] args) {
        // 1、定义可能出现的字符信息
        String dates = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        //2.循环5次,每次生成一个随机的索引,提取对应的字符连接起来即可
        String code = "";
        Random r = new Random();
        for (int i = 0; i < 5; i++) {
            //随机一个索引
            int index = r.nextInt(dates.length());
            char c = dates.charAt(index);
            code += c;
        }
        //3.输出字符串变量即可
        System.out.println(code);
    }
}

package com.wjh.String;
/*
    练习题:模拟用户登录
 */
import java.util.Random;
import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //1.定义正确的登录名称
        String okName = "admin";
        String okPassword = "123456";

        //2.定义一个循环循环3次,让用户登录
        for (int i = 2; i >= 0; i--) {
            System.out.println("请输入账号:");
            String name = sc.next();
            System.out.println("请输入密码:");
            String pass = sc.next();
            if(okName.equals(name) && okPassword.equals(pass)){
                System.out.println("登入成功!");
                break;
            }else{
                if(i == 0){
                    System.out.println("账号或密码输入错误!");
                    break;
                }
                System.out.println("账号或密码输入错误!您还有"+i+"次机会!");
            }
        }
        System.out.println("程序结束!");
    }
}

package com.wjh.String;
/*
    练习题:模拟用户登录
 */
import java.util.Random;
import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //1.定义正确的登录名称
        String okName = "15570033903";
        String okPassword = "123456";

        //2.定义一个循环循环3次,让用户登录
        for (int i = 2; i >= 0; i--) {
            System.out.println("请输入账号:");
            String name = sc.next();
            System.out.println("请输入密码:");
            String pass = sc.next();
            if(okName.equals(name) && okPassword.equals(pass)){
                System.out.println("登入成功!");
                String name1 = "****";
                String nameNoq =  okName.substring(0,3);
                String nameNoh =  okName.substring(7,11);
                System.out.println("欢迎会员"+nameNoq+"****"+nameNoh+"进入系统");
                break;
            }else{
                if(i == 0){
                    System.out.println("账号或密码输入错误!");
                    break;
                }
                System.out.println("账号或密码输入错误!您还有"+i+"次机会!");
            }
        }
        System.out.println("程序结束!");
    }
}

三.ArrayList简单介绍

        ArrayList代表的是集合类,集合是一种容器,与数组类似,不同的是集合的大小是不固定的

       通过创建ArrayList的对象表示得到一个集合容器,同时ArrayList提供了比数组更好用,更丰富的API(功能)给程序员使用。

1.集合概述

集合是与数组类似,也是一种容器,用于装数据的。

数组的特点

        数组定义完成并启动后,类型确定、长度固定

        问题:在个数不能确定,且要进行增删数据操作的时候,数组是不太合适的

 集合的特点


1.集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。

2.集合非常适合做元素个数不确定,且要进行增删操作的业务场景。

3.集合的提供了许多丰富、好用的功能,而数组的功能很单一

 

2.ArrayList集合快速入门

ArrayList集合

        ArrayList是集合中的一种,它支持索引。(暂时先学习这个,后期课程会学习整个集合体系)

ArrayList集合的对象获取



 

ArrayList集合添加元素的方法



 

package com.wjh.String;
/*
    目标:创建ArrayList对象,代表集合容器,往里面添加元素。
 */
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        //1.创建ArrayList集合的对象
        ArrayList list = new ArrayList();

        //2.往里面添加数据
        list.add("Java");
        list.add("Java");
        list.add("MySql");
        list.add("言希");
        list.add(23);
        list.add(20.5);
        list.add(false);
        System.out.println(list.add('中'));
        System.out.println(list);
        
        //3.给指定索引位置插入元素
        list.add(1,"希希子");
        System.out.println(list);

    }
}
true
[Java, Java, MySql, 言希, 23, 20.5, false, 中]
[Java, 希希子, Java, MySql, 言希, 23, 20.5, false, 中]

3.ArrayList对泛型的支持

泛型概述

        ArrayList<E>:其实就是一个泛型类,可以在编译阶段约束集合对家只能探作呆l数掂尖型。

举例:

        1.ArrayList<String> :此集合只能操作字符串类型的元素

        2.ArrayList<lnteger>:此集合只能操作整数类型的元素

注意:集合中只能存储引用类型,不支持基本数据类型。

package com.wjh.String;
/*
    目标:能够使用泛型约束ArrayList集合的数据类型
 */

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("Java");
        list.add("MySql");
        
        ArrayList<Integer> list1 = new ArrayList();    //JDK 1.7开始,泛型后面的类型申明可以不写
        /*
        不支持基本数据类型int double...
        */
        list1.add(23);
        list1.add(100);
        
    }
}

4.ArrayList常用API、遍历

ArrayList集合常用方法

package com.wjh.String;
/*
    目标:掌握ArrayList集合的常用API
 */

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList();
        list.add("Java");
        list.add("Java");
        list.add("MySql");
        list.add("MyBatis");
        list.add("JavaScript");
        list.add("HTML");

        //1.public E get(int index)返回指定索引处的元素
        String e = list.get(3);
        String e2 = list.get(2);
        System.out.println(e);
        System.out.println(e2);

        //2.public int size() 返回集合中的元素的个数
        System.out.println(list.size());
        System.out.println("-----------");

        //3.集合的遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

        //4.public E remove(int index)删除指定索引处的元素,返回被删除的元素
        System.out.println(list);   //[Java, Java, MySql, MyBatis, JavaScript, HTML]
        String e3 = list.remove(1);
        System.out.println(list);   //[Java, MySql, MyBatis, JavaScript, HTML]

        //5.public boolean remove(Object o)删除指雇赠元素,返回删除是否成功
        System.out.println(list);
        System.out.println(list.remove("MyBatis"));     //true
        System.out.println(list);   //[Java, MySql, JavaScript, HTML]

        ArrayList<String> list1 = new ArrayList<>();
        list1.add("java");
        list1.add("贾宝玉");
        list1.add("java");
        list1.add("Mysql");
        System.out.println(list1);  //[java, 贾宝玉, java, Mysql]
        //集合中相同的值用list.remove()只会删除第一次出现的这个元素值,后面的不删除
        System.out.println(list1.remove("java"));   //true
        System.out.println(list1);    //[贾宝玉, java, Mysql]

        //6.public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
        String e4 = list1.set(0,"王熙凤");
        System.out.println(e4); //贾宝玉
        System.out.println(list1);  //[王熙凤, java, Mysql]


    }
}

5.ArrayList集合案例:遍历并删除元素

package com.wjh.String;
/*
      需求:S2211班的成绩为:[98, 77, 66, 89, 79, 50, 100],现在需要把80分以下的成绩数据去掉
 */

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        //1.创建一个ArrayList集合存储一个班的成绩
        ArrayList<Integer> list = new ArrayList<>();
        list.add(98);
        list.add(77);
        list.add(66);
        list.add(89);
        list.add(79);
        list.add(50);
        list.add(100);
        System.out.println("S2211班的成绩为:"+list); //S2211班的成绩为:[98, 77, 66, 89, 79, 50, 100]

        //2.把低于80分的成绩从集合中去掉
        //代码有问题
//        for (int i = 0; i < list.size(); i++) {
//            Integer score = list.get(i);
//            if(score < 80){
//                //这个分数必须删除
//                list.remove(score);
//            }
//        }
//        System.out.println("S2211班的成绩80以上为:"+list);

        System.out.println("1.完美的方案:");
        for (int i = 0; i < list.size(); i++) {
            Integer score = list.get(i);
            if(score < 80){
                //这个分数必须删除
                list.remove(i);
                i--;    //删除成功后,这样可以保证下次回到这个位置,如此不会跳过数据
            }
        }
        System.out.println("S2211班的成绩80以上为:"+list);//[98, 89, 100]

 /*

        System.out.println("2.完美的方案");
        //从后面倒着遍历再删除就可以
        for (int i = list.size()-1; i >= 0; i--) {
            Integer score2 = list.get(i);
            if(score2 < 80){
                //这个分数必须删除
                list.remove(i);
            }
        }
        System.out.println(list);
*/

    }
}

6.ArrayList集合案例:存储自定义类型的对象

 test.java

package com.wjh.String;
/*
      需求:某影院系统需要在后台存储上述三部电影,然后依次展示出来。
      需求:定义电影类(名称,分值,演员),
      创建3个电影对象,代表三部影片,存入集合中并遍历。
      《肖生克的救赎》,9.7,罗宾斯
      《霸王别姬》,9.6,张国荣、张丰毅
      《阿甘正传》,9.5,汤姆.汉克斯

 */

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        //目标:理解ArrayList集合存储自定义类型的对象
        //1.定义电影类
        //2.访问电影类,创建3个电影对象
        Movie m1 = new Movie("《肖生克的救赎》",9.7,"罗宾斯");
        Movie m2 = new Movie("《霸王别姬》",9.6,"张国荣、张丰毅");
        Movie m3 = new Movie("《阿甘正传》",9.5,"汤姆.汉克斯");

        //3.创建一个电影类型的ArrayList集合,存储三部电影对象
        ArrayList<Movie> movies = new ArrayList<>();
        movies.add(m1);
        movies.add(m2);
        movies.add(m3);
        System.out.println(movies); //[com.wjh.String.Movie@3b07d329, com.wjh.String.Movie@41629346, com.wjh.String.Movie@404b9385]

        //4.遍历电影类的集合中的每个电影对象,访问他的信息即可
        for (int i = 0; i < movies.size(); i++) {
            //i = 0 1 2
            Movie m = movies.get(i);
            System.out.println("电影名称:"+m.getName());
            System.out.println("电影评分:"+m.getScore());
            System.out.println("电影主演:"+m.getActor());
            System.out.println("--------------------");
        }
    }
}

Movie.java

package com.wjh.String;

public class Movie {
    private String name;
    private double score;
    private String actor;

    public Movie() {

    }

    public Movie(String name, double score, String actor) {
        this.name = name;
        this.score = score;
        this.actor = actor;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }
}

控制台:

[com.wjh.String.Movie@3b07d329, com.wjh.String.Movie@41629346, com.wjh.String.Movie@404b9385]
电影名称:《肖生克的救赎》
电影评分:9.7
电影主演:罗宾斯
--------------------
电影名称:《霸王别姬》
电影评分:9.6
电影主演:张国荣、张丰毅
--------------------
电影名称:《阿甘正传》
电影评分:9.5
电影主演:汤姆.汉克斯
--------------------

进程已结束,退出代码为 0

 结论:集合中存储的元素并不是对象本身,而是对象的地址。

7.ArrayList集合案例:元素搜索

 test.java

package com.wjh.String;
/*
      案例:学生信息系统:展示数据,并按照学号完成搜索学生类信息(学号,姓名,性别,班级>
    测试数据:
    "20180302","叶孤城",23,"护理一班”
    "20180303","东方不败”,23,"推拿二班”
    "20180304","西门吹雪",26,"中药学四班"
    "20180305","梅超风",26,"神经科2班”


 */

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class StringDemo1 {
    public static void main(String[] args) {
        //1.定义学生类
        //2.创建集合存储学生对象,创建学生对象封装学生信息
        //把学生对象添加到集合中去
        Student s1 = new Student("2208", "周扒皮", 23, "管理08");
        Student s2 = new Student("2205", "林貂毛", 21, "教育05");
        Student s3 = new Student("2206", "枭雄鸿", 28, "经济06");
        Student s4 = new Student("2201", "欧巴王", 18, "信息01");

        ArrayList<Student> students = new ArrayList<>();
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);

        System.out.println("学号" + "\t\t\t" + "姓名" + "\t\t\t" + "年龄" + "\t\t" + "班级");
        //3.遍历学生信息展示。
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            System.out.print(s.getId() + "\t\t");
            System.out.print(s.getName() + "\t\t");
            System.out.print(s.getAge() + "\t\t");
            System.out.print(s.getClassName() + "\t\t");
            System.out.println();
        }
            Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请输入学号查询学生信息:");
            String id = sc.next();
            //5.调用查询方法
            Student s = getStudent(students,id);
            //6.判断s是否存在对象地址
            if(s == null){
                System.out.println("查无此人!");
            }else{
                System.out.println("您查询的信息如下:");
                System.out.println("学号" + "\t\t\t" + "姓名" + "\t\t\t" + "年龄" + "\t\t" + "班级");
                System.out.print(s.getId() + "\t\t");
                System.out.print(s.getName() + "\t\t");
                System.out.print(s.getAge() + "\t\t");
                System.out.print(s.getClassName() + "\t\t");
                System.out.println();
            }
        }
    }

    //4.定义方法完成按照学号的搜索功能
    public static Student getStudent(ArrayList<Student> students, String id) {
            for (int i = 0; i < students.size(); i++) {
                Student s = students.get(i);
                //2.询问当前遍历的这个学生对象的学号,是否是我们要找的学号
                if (s.getId().equals(id)) {
                    //这个s代表的学生对象,就是我们要找的,返回它
                    return s;
                }
            }
            //查无此人
            return null;
    }

}

Student.java

package com.wjh.String;

public class Student {
    private String id;
    private String name;
    private int age;
    private String className;

    public Student() {

    }

    public Student(String id, String name, int age, String className) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.className = className;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }
}

控制台:

学号			姓名			年龄		班级
2208		周扒皮		23		管理08		
2205		林貂毛		21		教育05		
2206		枭雄鸿		28		经济06		
2201		欧巴王		18		信息01		
请输入学号查询学生信息:
2200
查无此人!
请输入学号查询学生信息:
2209
查无此人!
请输入学号查询学生信息:
2201
您查询的信息如下:
学号			姓名			年龄		班级
2201		欧巴王		18		信息01		

进程已结束,退出代码为 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员希西子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值