黑马全套Java教程(三)(下)

简介: 黑马全套Java教程(三)

15.5 String


String概述


String类在java.lang包下,所以使用的时候不需要导包


String类代表字符串,Java程序中的所有字符串文字(例如“abc”)都被实现为此类的实例;也就是说,Java程序中所有的双引号字符串,都是String类的对象


字符串的特点


  • 字符串不可变,它们的值在创建后不能被更改


  • 虽然String的值是不可变的,但是它们可以被共享


  • 字符串效果上相当于字符数组(char[]),但是底层原理是字节数组(byte[])


String构造方法



package myString;
/*
    String构造方法:
        1. public String():创建一个空白字符串对象,不包含任何内容
        2. public String(char[] chs):根据字符数组的内容,来创建字符串对象
        3. public String(byte[] bys):根据字节数组的内容,来创建字符串对象
        4. String s = "abc"   直接赋值的方法创建字符串对象,内容就是abc
 */
public class StringDemo01 {
    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:" + s2);
        //public String(byte[] bys):根据字节数组的内容,来创建字符串对象
        byte[] bys = {97,98,99};
        String s3 = new String(bys);
        System.out.println("s3:" + s3);
        //String s = "abc"   直接赋值的方法创建字符串对象,内容就是abc
        String s4 = "abc";   // 这里是没有使用构造方法的
        System.out.println("s4:" + s4);
    }
}



String对象的特点


特点1



特点2



特点1内存过程:输出false



package myString;
public class StringDemo1 {
    public static void main(String[] args) {
        //构造方法的方式得到对象
        char[] chs = {'a', 'b', 'c'};
        String s1 = new String(chs);
        String s2 = new String(chs);
        System.out.println(s1==s2);
    }
}



特点2内存过程:输出true



代码实现比较如下:


package myString;
public class StringDemo2 {
    public static void main(String[] args) {
        //直接赋值的方式得到对象
        String s3 = "abc";
        String s4 = "abc";
        System.out.println(s3==s4);
    }
}



15.6 字符串的比较


使用==做比较


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


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


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


package myString;
/*
    使用 == 做比较
        基本类型:比较的是数据值是否相同
        引用类型:比较的是地址值是否相同
    public boolean equals(Object anObject)
    将此字符串与指定对象进行比较
 */
public class StringDemo02 {
    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(s2==s3);
        System.out.println(s3==s4);   //相同
        System.out.println("--------------");
        //比较字符串内容是否相同
        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
        System.out.println(s3.equals(s4));
    }
}



案例1:用户登录模拟


package myString;
import java.util.Scanner;
public class StringTest01 {
    public static void main(String[] args) {
        //已知用户名和密码,定义两个字符串表示即可
        String username = "itheima";
        String password = "czbk";
        //for循环实现多次机会
        for (int i = 0; i < 3; i++) {
            //键盘录入要登录的用户名和密码,用Scanner实现
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入用户名:");
            String name = sc.nextLine();
            System.out.println("请输入密码:");
            String pwd = sc.nextLine();
            //进行比较
            if (name.equals(username) && pwd.equals(password)) {
                System.out.println("登录成功");
                break;
            } else {
                if (2 - i == 0) {
                    System.out.println("你的账户被锁定,请与管理员联系");
                } else {
                    System.out.println("登录失败,你还有" + (2 - i) + "次机会");
                }
            }
        }
    }
}


案例2:遍历字符串



package myString;
import java.util.Scanner;
public class StringTest02 {
    public static void main(String[] args) {
        //键盘录入一个字符串,用Scanner实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();
        //遍历字符串,首先要能够获取到字符串的每一个字符
        //length()方法获取字符串长度
        for (int i = 0; i < line.length(); i++) {
            System.out.println(line.charAt(i));
        }
    }
}



案例3:统计字符次数



package myString;
import java.util.Scanner;
public class StringTest03 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String line = sc.nextLine();
        int DaXie = 0;
        int XiaoXie = 0;
        int ZiMu = 0;
        for (int i = 0; i < line.length(); i++) {
            char ch = line.charAt(i);
            if (ch >= 'A' && ch <= 'Z') {
                DaXie += 1;
            } else if (ch >= 'a' && ch <= 'z') {
                XiaoXie += 1;
            } else if (ch >= '0' && ch <= '9') {
                ZiMu += 1;
            }
        }
        System.out.println("大写字母个数:" + DaXie);
        System.out.println("小写字母个数:" + XiaoXie);
        System.out.println("数字个数:" + ZiMu);
    }
}



案例4:拼接字符串



package myString;
/*
    拼接字符串
 */
public class StringTest04 {
    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;
    }
}



案例5:字符串反转



package myString;
import java.util.Scanner;
/*
    字符串反转
 */
public class StringTest05 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = sc.nextLine();
        String sReverse = StringToReverse(s);
        System.out.println("反转后:" + sReverse);
    }
    public static String StringToReverse(String s) {
        String ss = "";
        for (int i = s.length() - 1; i >= 0; i--) {
            ss += s.charAt(i);
        }
        return ss;
    }
}



15.7 String中的方法


常见方法



可在帮助文档中查看到:





字符串中的方法比较多!


15.8 StringBuilder


String内存过程:我们知道字符串是不可变的,常量



可以看到进行字符串拼接会浪费堆内存



所以引出来了StringBuilder


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


String和StringBuilder的区别?


  • String:内容是不可变的


  • StringBuilder:内容是可变的


StringBuilder构造方法



例1


package myString;
/*
    StringBuilder构造方法
        public StringBuilder():创建一个空白可变字符串对象,不含有任何内容
        public StringBuilder(String str):根据字符串的内容,来创建可变字符串对象
 */
public class StringBuilderDemo01 {
    public static void main(String[] args) {
        //1.public StringBuilder():创建一个空白可变字符串对象,不含有任何内容
        StringBuilder sb = new StringBuilder();
        System.out.println("sb:" + sb);
        System.out.println("sb.length():" + sb.length());
        System.out.println("--------------------------");
        //2.public StringBuilder(String str):根据字符串的内容,来创建可变字符串对象
        StringBuilder sb2 = new StringBuilder("hello");
        System.out.println("sb2:" + sb2);
        System.out.println("sb2.length():" + sb2.length());
    }
}



StringBuilder添加和反转的方法


例:添加:.append()


package myString;
public class StringBuilderDemo02 {
    public static void main(String[] args) {
        //创建对象
        StringBuilder sb = new StringBuilder();
        //
        StringBuilder sb2 = new StringBuilder("hello");
        StringBuilder sb3 = sb.append("hello");
        System.out.println("sb:" + sb);
        System.out.println("sb2:" + sb2);
        System.out.println("-----------------");
        System.out.println("sb==sb2:" + (sb==sb2));
        System.out.println("sb==sb3:" + (sb==sb3));
    }
}



例:反转:.reverse()


package myStringBuilder;
/*
    StringBuilder 的添加和反转方法
        public StringBuilder append(任意类型):添加数据,并返回对象本身
        public StringBuilder reverse():返回相反的字符序列
 */
public class StringBuilderDemo01 {
    public static void main(String[] args) {
        //创建对象
        StringBuilder sb = new StringBuilder();
//        sb.append("hello");
//        sb.append("world");
//        sb.append("java");
//        sb.append(100);
        //链式编程
        sb.append("hello").append("world").append("java").append(100);
        System.out.println(sb);
        //反转
        sb.reverse();
        System.out.println(sb);
    }
}



15.9 StringBuilder和String的相互转换


  • StringBuilder 转换为 String:toString()


  • String 转换为 StringBuilder:public StringBuilder(String s):通过构造方法就可以实现


package myStringBuilder;
/*
    StringBuilder 转换为 String
        toString()
    String 转换为 StringBuilder
        public StringBuilder(String s):通过构造方法就可以实现
 */
public class StringBuilderDemo02 {
    public static void main(String[] args) {
        //1.StringBuilder to String
        StringBuilder sb = new StringBuilder();
        sb.append("hello");
        //String s = sb;   //这个是错误做法
        String s = sb.toString();
        System.out.println(s);
        //2.String to StringBuilder
        String ss = "hello";
        //StringBuilder s = ss;  //这个是错误的
        StringBuilder sb2 = new StringBuilder(ss);
        System.out.println(sb2);
    }
}



案例:拼接字符串



package myStringBuilder;
/*
    拼接字符串
 */
public class StringBuilderDemo03 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        String s = pinJie(arr);
        System.out.println(s);
    }
    public static String pinJie(int[] arr) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            sb.append(arr[i]);
            if (i != arr.length - 1) {
                sb.append(",");
            }
        }
        sb.append("]");
        String s = sb.toString();
        return s;
    }
}


案例:字符串反转



package myStringBuilder;
/*
    字符串反转
 */
import java.util.Scanner;
public class StringBuilderDemo04 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();
        String s = stringReverse(line);
        System.out.println("反转后:" + s);
    }
    public static String stringReverse(String s){
//        StringBuilder sb = new StringBuilder(s);
//        sb.reverse();
//        String ss = sb.toString();
//        return ss;
        //用一行代码实现上面功能
        return new StringBuilder(s).reverse().toString();
    }
}



这些方法都能在帮助文档中找到!


如下:






本博客到黑马视频的第133个!


16 集合


集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变


集合类有很多,目前只学习一个:ArrayLlist,需要导包


16.1 ArrayList


ArrayList< E>


  • 可调整大小的数组实现


  • < E>:是一种特殊的数据类型,泛型


什么用呢?


在出现E的地方我们使用引用数据类型替换即可


举例:ArrayList<String>ArrayList<Student>


16.2 ArrayList构造方法和添加方法



package myArrayList;
import java.util.ArrayList;
/*
    ArrayList构造方法:
        public ArrayList():创建一个空的集合对象
    ArrayList添加方法:
        public bollean add(E e):将指定的袁术追加到此集合的末尾
        public void add(int index, E,element):在此集合中的指定未知插入指定的元素
 */
public class ArrayListDemo01 {
    public static void main(String[] args) {
        //public ArrayList():创建一个空的集合对象
        //ArrayList<String> array = new ArrayList<>();
        ArrayList<String> array = new ArrayList<String>();  //这两个都行
        //add添加元素
        System.out.println(array.add("hello"));
        System.out.println(array.add("world"));
        array.add("100");
        //add指定位置添加元素
        array.add(1, "java");   //如果索引超出会报错
        array.add(4, "javaee");
        //输出集合
        System.out.println("array:" + array);
    }
}


16.3 ArrayList集合常用方法



代码举例如下:


package myArrayList;
import java.util.ArrayList;
/*
    Array常用方法:
        remove删除指定元素
        remove删除指定索引处的元素
        set修改指定索引处的元素
        get获取指定索引处的元素
        size()返回集合元素个数
 */
public class ArrayListDemo02 {
    public static void main(String[] args) {
        //创建集合
        ArrayList<String> array = new ArrayList<String>();
        //添加元素
        array.add("world");
        array.add(1, "hello");
        array.add("java");
        array.add("python");
        System.out.println("attay:" + array);
        //1.删除指定元素
        System.out.println("1.删除world:" + array.remove("world"));
        System.out.println(" 删除javaee:" + array.remove("javaee")); //没有这个,false
        System.out.println("attay1:" + array);
        //2.指定索引
        System.out.println("删除指定索引1,返回索引对应的值:" + array.remove(1));  //返回索引值的元素
        //System.out.println(array.remove(3));   //删除时索引越界会报错
        System.out.println("attay2:" + array);
        //3.修改索引对应的值
        System.out.println("修改索引1的值,返回被修改的值:" + array.set(1, "C++"));
        //注意:索引越界会报错
        System.out.println("attay3:" + array);
        //4.返回指定索引处的元素
        System.out.println("返回1索引的元素:" + array.get(1));
        System.out.println("attay4:" + array);
        //5.获取元素个数
        System.out.println("元素个数:" + array.size());
    }
}


案例:存储字符串并遍历



package myArrayList;
import java.util.ArrayList;
public class ArrayListTest01 {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<String> array = new ArrayList<String>();
        //添加元素
        array.add("aaa");
        array.add("bbb");
        array.add("ccc");
        //遍历
        for (int i=0; i<array.size(); i++){
            String s = array.get(i);
            System.out.println(s);
        }
    }
}


案例2:存储学生对象并遍历



package myArrayList;
import java.util.ArrayList;
public class ArrayTest02 {
    public static void main(String[] args) {
        //创建集合
        ArrayList<Student> array = new ArrayList<Student>();  //括号里面改了
        //创建学生对象
        Student s1 = new Student("林青霞", 30);
        Student s2 = new Student("风清扬", 33);
        Student s3 = new Student("张曼玉", 18);
        //添加学生对象到集合中
        array.add(s1);
        array.add(s2);
        array.add(s3);
        //遍历
        for (int i=0; i< array.size(); i++){
            Student s = array.get(i);
            System.out.println(s.getName() + "," + s.getAge());
        }
    }
}


案例3:



package myArrayList;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayTest03 {
    public static void main(String[] args) {
        //创建集合
        ArrayList<Student1> array = new ArrayList<Student1>();
        //键盘录入
        addStudent(array);
        addStudent(array);
        addStudent(array);
        //遍历集合
        for(int i=0; i<array.size(); i++){
            Student1 s = array.get(i);
            System.out.println(s.getName() + "," + s.getAge());
        }
    }
    public static void addStudent(ArrayList<Student1> array){
        //键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生姓名:");
        String name = sc.nextLine();
        System.out.println("请输入学生年龄:");
        String age = sc.nextLine();
        //创建学生对象
        Student1 s = new Student1();
        s.setName(name);
        s.setAge(age);
        //往集合中添加学生对象
        array.add(s);
    }
}


此博客到视频139截止!

相关文章
|
5天前
|
Web App开发 JavaScript 前端开发
《手把手教你》系列技巧篇(三十九)-java+ selenium自动化测试-JavaScript的调用执行-上篇(详解教程)
【5月更文挑战第3天】本文介绍了如何在Web自动化测试中使用JavaScript执行器(JavascriptExecutor)来完成Selenium API无法处理的任务。首先,需要将WebDriver转换为JavascriptExecutor对象,然后通过executeScript方法执行JavaScript代码。示例用法包括设置JS代码字符串并调用executeScript。文章提供了两个实战场景:一是当时间插件限制输入时,用JS去除元素的readonly属性;二是处理需滚动才能显示的元素,利用JS滚动页面。还给出了一个滚动到底部的代码示例,并提供了详细步骤和解释。
28 10
|
13天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(&lt;https://www.sojump.com/m/2792226.aspx/&gt;)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
24 0
|
2天前
|
前端开发 Java 测试技术
《手把手教你》系列技巧篇(四十二)-java+ selenium自动化测试 - 处理iframe -下篇(详解教程)
【5月更文挑战第6天】本文介绍了如何使用Selenium处理含有iframe的网页。作者首先解释了iframe是什么,即HTML中的一个框架,用于在一个页面中嵌入另一个页面。接着,通过一个实战例子展示了在QQ邮箱登录页面中,由于输入框存在于iframe内,导致直接定位元素失败。作者提供了三种方法来处理这种情况:1)通过id或name属性切换到iframe;2)使用webElement对象切换;3)通过索引切换。最后,给出了相应的Java代码示例,并提醒读者根据iframe的实际情况选择合适的方法进行切换和元素定位。
7 0
|
3天前
|
前端开发 测试技术 Python
《手把手教你》系列技巧篇(四十一)-java+ selenium自动化测试 - 处理iframe -上篇(详解教程)
【5月更文挑战第5天】本文介绍了HTML中的`iframe`标签,它用于在网页中嵌套其他网页。`iframe`常用于加载外部内容或网站的某个部分,以实现页面美观。文章还讲述了使用Selenium自动化测试时如何处理`iframe`,通过`switchTo().frame()`方法进入`iframe`,完成相应操作,然后使用`switchTo().defaultContent()`返回主窗口。此外,文章提供了一个包含`iframe`的HTML代码示例,并给出了一个简单的自动化测试代码实战,演示了如何在`iframe`中输入文本。
14 3
|
4天前
|
JavaScript 前端开发 Java
《手把手教你》系列技巧篇(四十)-java+ selenium自动化测试-JavaScript的调用执行-下篇(详解教程)
【5月更文挑战第4天】本文介绍了如何使用JavaScriptExecutor在自动化测试中实现元素高亮显示。通过创建并执行JS代码,可以改变元素的样式,例如设置背景色和边框,以突出显示被操作的元素。文中提供了一个Java示例,展示了如何在Selenium中使用此方法,并附有代码截图和运行效果展示。该技术有助于跟踪和理解测试过程中的元素交互。
8 0
|
6天前
|
JavaScript 前端开发 测试技术
《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
【5月更文挑战第2天】在自动化测试过程中,经常会遇到处理日期控件的点击问题。宏哥之前分享过一种方法,但如果输入框是`readonly`属性,这种方法就无法奏效了。不过,通过修改元素属性,依然可以实现自动化填写日期。首先,定位到日期输入框并移除`readonly`属性,然后使用`sendKeys`方法输入日期。这样,即使输入框设置了`readonly`,也能成功处理日期控件。
24 1
|
7天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十七)-java+ selenium自动化测试-日历时间控件-上篇(详解教程)
【5月更文挑战第1天】该文介绍了使用Selenium自动化测试网页日历控件的方法。首先,文章提到在某些Web应用中,日历控件常用于选择日期并筛选数据。接着,它提供了两个实现思路:一是将日历视为文本输入框,直接输入日期;二是模拟用户交互,逐步选择日期。文中给出了JQueryUI网站的一个示例,并展示了对应的Java代码实现,包括点击日历、选择日期等操作。
30 0
|
13天前
|
Java 测试技术 项目管理
Java基础教程(22)-构建工具Maven的基本使用
【4月更文挑战第22天】Maven是Java项目管理及构建工具,简化构建、测试、打包和部署等任务。遵循约定优于配置原则,核心是`pom.xml`配置文件,用于管理依赖和项目信息。安装涉及下载、解压、配置环境变量。在IDEA中使用Maven创建项目,通过`pom.xml`添加依赖和管理版本。常用命令包括`clean`、`compile`、`test`、`package`、`install`和`deploy`。IDEA支持直接执行这些命令。
|
13天前
|
NoSQL Java 关系型数据库
Java基础教程(21)-Java连接MongoDB
【4月更文挑战第21天】MongoDB是开源的NoSQL数据库,强调高性能和灵活性。Java应用通过MongoDB Java驱动与之交互,涉及MongoClient、MongoDatabase、MongoCollection和Document等组件。连接MongoDB的步骤包括:配置连接字符串、创建MongoClient、选择数据库和集合。伪代码示例展示了如何建立连接、插入和查询数据。
|
14天前
|
存储 前端开发 测试技术
《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)
【4月更文挑战第27天】本文介绍了使用Java+Selenium进行Web自动化测试时,如何遍历和操作多选按钮的方法。文章分为两个部分,首先是一个本地HTML页面的示例,展示了多选按钮的HTML代码和页面效果,并详细解释了遍历多选按钮的思路:找到所有多选按钮的共同点,通过定位这些元素并放入list容器中,然后使用for循环遍历并操作。 第二部分介绍了在JQueryUI网站上的实战,给出了被测网址,展示了代码设计,同样使用了findElements()方法获取所有多选按钮并存储到list中,然后遍历并进行点击操作。最后,文章对整个过程进行了小结,并推荐了作者的其他自动化测试教程资源。
20 0