为什么要学习String的处理呢?

开发中,对字符串的处理是非常常见的。
String是什么?可以做什么?
java.lang.String 代表字符串。可以用来创建对象封装字符串数据,并对其进行处理。
1、创建对象
2、封装字符串数据
3、调用String的方法

String创建对象封装字符串数据的方法:
方式一:
Java程序中的所有字符串文字(例如:“abc”)都为此类对象。
String name = "小黑";
String SchoolName = "黑马程序员";方式二:
调用String类的构造器初始化字符串对象。
new String()创建字符串对象,并调用构造器初始化字符串。

package cn.ensource.string;
public class StringDemo {
    public static void main(String[] args) {
        String name = "itheima";
        System.out.println(name);
        String rs1 = new String();
        System.out.println(rs1);
        String rs2 = new String("itheima");
        System.out.println(rs2);
        char[] chars = {'a', 'b', 'c'};
        String rs3 = new String(chars);
        System.out.println(rs3);
        byte[] bytes = {100, 101, 102};
        String rs4 = new String(bytes);
        System.out.println(rs4);
    }
}运行结果:


通过构造函数创建
通过new创建的字符串对象,每一次new都会申请一个空间,虽然内容相同,但是地址值不同。
直接赋值方式创建:
以“”双引号给出的字符串,只要字符串序列相同顺序和大小相同,无论程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护。
String类的常用方法:

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

为什么是快速熟悉这些方法呢?
API是解决需求的,快速地认识他们,实实在在地解决业务需求。
package cn.ensource.string;
public class StringDemo2 {
    public static void main(String[] args) {
        // 目标:快速熟悉String提供的处理字符串的方法
        String s = "黑马Java";
        // 获取字符串的长度
        System.out.println(s.length());
        // 提取字符串中某个索引位置处的字符
        char c = s.charAt(1);
        System.out.println(c);
        // 字符串的遍历
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            System.out.print(ch);
        }
        System.out.println("--------");
        // 把字符串转成字符数组,然后再进行遍历
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.print(chars[i]);
        }
        System.out.println("--------");
        // 判断字符串内容,内容一样,就返回true
        String s1 = new String("黑马");
        String s2 = new String("黑马");
        boolean rs = s.equals(s2);
        System.out.println(rs);
        System.out.println("--------");
        // 忽略大小写比较字符串
        String c1 = "34Aefg";
        String c2 = "24aefg";
        System.out.println(c1.equals(c2));
        System.out.println(c1.equalsIgnoreCase(c2));
        System.out.println("--------");
        // 截取字符串内容
        String s3 = "Java是最好的编程语言之一";
        System.out.println(s3.substring(0, 8));
        System.out.println("--------");
        // 截取字符串内容,从当前位置到字符串末尾
        System.out.println(s3.substring(8));
        System.out.println("--------");
        // 把字符串的某个内容,替换成新内容
        String s3c = s3.replace("Java", "C++");
        System.out.println(s3c);
        System.out.println("--------");
        // 判断字符串中是否包含某个关键字
        String info = "Java是最好的编程语言之一";
        boolean rs5 = info.contains("Java");
        System.out.println(rs5);
        // startwith
        System.out.println("--------");
        String info2 = "Java是最好的编程语言之一";
        boolean rs6 = info2.startsWith("Java");
        System.out.println(rs6);
        System.out.println("--------");
        // 分割字符串
        String str5 = "张无忌,周芷若,殷素素,赵敏";
        String[] names = str5.split(",");
        for(int i = 0; i < names.length; i++) {
            System.out.println(names[i]);
        }
    }
}split这个成员方法,之前在python中也遇到。
如果方法不再记得了,都是可以到API文档中查询的。
另外:
==:
比较基本数据类型:比较具体的值。
比较引用数据类型:比较的是对象地址值。

package com.company;
public class Main {
    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 == s4);
        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));
    }
}运行结果:
false
false
true
-------------
true
true
true用户登录案例:
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        String username = "changchunhua";
        String password = "chang@123";
        for (int i=0; i<3; i++) {
            Scanner sc =  new Scanner(System.in);
            System.out.println("Please input username: ");
            String name = sc.nextLine();
            System.out.println("Please input password: ");
            String pwd = sc.nextLine();
            if (name.equals(username) && pwd.equals(password)) {
                System.out.println("Sign in susccessfully!");
                break;
            } else {
                if (2 - i == 0) {
                    System.out.println("Your account is locked!");
                } else {
                    System.out.println("Your has 2 - i times to sign in.");
                }
            }
        }
    }
}运行结果:
Please input username:
chang
Please input password:
chang@123
Your has 2 - i times to sign in.
Please input username:
changchun
Please input password:
chang@123
Your has 2 - i times to sign in.
Please input username:
changchunhua
Please input password:
chang@123
Sign in susccessfully!字符串反转:
package com.company;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Please input a string: ");
        String line = sc.nextLine();
        String s = reverse(line);
        System.out.println("s: " + s);
    }
    public static String reverse(String s) {
        String ss = "";
        for(int i=s.length()-1; i>=0; i--) {
            ss += s.charAt(i);
        }
        return ss;
    }
}运行结果:
Please input a string:
changchunhua
s: auhnuhcgnahc


















