day08 API/ String类

49 阅读8分钟
看成员方法(没有static关键字修饰,只能由对象调用):
		(1)方法名称:
		(2)返回值类型:
		(3)参数列表:
 API的使用步骤:
	1.查看类 java.util.Scanner :该类需要import导入后使用。
	2.查看构造方法
		public Scanner(InputStream source) :
			 构造一个新的 Scanner ,它生成的值是从指定的输入流扫描的。
	3.查看成员方法
		public String next() : 
			获取键盘录入的字符串(不能包含空白字符),遇到空白字符/回车换行就认为录入结束		
        public String nextLine() :
        	获取键盘录入的一行字符串(可以包含空白字符),遇到回车换行就认为录入结束
  /*
    注意:
        1.先使用nextLine方法,后面再使用next/nextInt/nextDouble方法,是没有问题的

        2.先使用next/nextInt/nextDouble方法,后面使用nextLine方法,是有问题的
            可以理解为: nextLine方法,会抢其它方法的回车

    解决方案:
        (1)单独创建一个新的Scanner对象给nextLine使用
        (2)全部使用nextLine方法,不使用类似next的方法
        (3)全是使用类似next的方法,不使用nextLine方法
 */  
 String类: 用来描述的字符串的,字符串是常量 
String类的对象的体现形式:
	1.所有双引号""引起来的内容,都是String类的对象,都可以调用String类中定义的方法
	2.和前面一样,使用new关键字创建String类的对象
##### String类的构造方法        
        String str = "abc"; 
		相当于:   char data[] = {'a', 'b', 'c'}; 
        String str = new String(data);  	// String底层是靠字符数组实现的。
public String(): 创建一个空白字符串对象,不含有任何内容,等价于""
        //(1)public String(): 创建一个空白字符串对象,不含有任何内容,等价于""
        String s1 = new String();
        System.out.println("Hello"+s1+"World");//HelloWorld
         //(2)public String(char[] chs) 根据构造方法字符数组chs,创建一个字符串对象
        char[] chs = {'a','b','c'};
        String s2 = new String(chs);
        System.out.println(s2);//abc
        byte[] bs = {97,98,99};
        String s3 = new String(bs);
        System.out.println(s3);//abc     
 /* 判断功能的方法 
	- public boolean equals(Object anObject) :
		将此字符串(调用分的对象)与指定对象(传递给方法的参数)进行比较内容是否相同, 区分大小写。
		举例:
			s1.equals(s2):比较s1和s2的内容是否一模一样,如果一样返回true,否则返回false
    
	- public boolean equalsIgnoreCase (String anotherString) :
		将此字符串与指定对象进 行比较内容是否相同,忽略大小写。 
		举例:s1.equalsIgnoreCase(s2):比较s1和s2的内容是否相同,但是不区分大小写 
		
	- public boolean contains(String str) : 当且仅当此字符串包含指定的str时,返回 true。 
		举例:s1.contains(s2): s1中包含s2,返回true,不包含返回false
        
    - public boolean startsWith(String str) : 判断调用方法的字符串是否以参数字符串开头
        举例:s1.startsWith(s2): s1以s2开头,返回true,否则返回false

    - public boolean endsWith(String str) : 判断调用方法的字符串是否以参数字符串结尾
        举例:s1.endsWith(s2): s1以s2结尾,返回true,否则返回false
*/
用户登录案例
 需求:
        已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示 
        如果用户名和密码都正确: 提示"登录成功"
        如果用户名或者密码不正确: 提示"登录失败",同时提示"剩余xx次机会,请珍惜"
 public class Demo04Login {
    public static void main(String[] args) {
        //1.定义2个String变量rUser和rPass,表示已经注册的用户名和密码,
        //并初始化(用户名: abc,密码: 123)
        String rUser = "abc", rPass = "123";

        //2.创建键盘录入Scanner类的对象
        Scanner sc = new Scanner(System.in);

        //3.引用登录总共给三次机会,使用for循环
        for (int times = 1; times <= 3; times++) {
            //3.1 获取键盘录入的用户名和密码,分别保存到String变量inUser和inPass中
            System.out.println("请输入用户名: ");
            String inUser = sc.next();
            System.out.println("请输入密码: ");
            String inPass = sc.next();

            //3.2 判断 如果输入的用户名和注册的用户名内容相同 并且 输入的密码和注册的密码内容也相同
            if ((inUser.equals(rUser)) && (inPass.equals(rPass))) {
                //3.3 提示 "登录成功"
                System.out.println("登录成功");
                break;//结束for循环
            } else {
                //3.4 如果 用户名或者密码 不正确
                //3.5 提示"登录失败"
                System.out.println("用户名或者密码不正确,登录失败");
                //单独使用if判断使用次数
                if (times == 3) {
                    System.out.println("您的免费试用3次的机会已经用完,拜拜.....");
                } else {
                    //同时提示"剩余xx次机会,请珍惜"
                    System.out.println("剩余" + (3 - times) + "次机会,请珍惜");
                }
            }
        }
    }
}
  获取功能的方法
    - public int length () :返回此字符串的长度。
        举例:s.length() 获取s中的字符的数量

    - public String concat (String str) :将指定的字符串连接到该字符串的末尾。
        举例:s1.concat(s2) 把s2连接到s1的末尾 等价于 s1 += s2
	
    - public char charAt (int index) :返回指定索引处的 char值。
        举例:s1.charAt(5) 获取s1中索引为5的字符
		
    - public int indexOf (String str) :返回指定子字符串第一次出现在该字符串内的索引。
         举例:s1.indexOf(s2) 查找s2在s1中第一次出现的位置,如果不存在,返回-1
         
    - public String substring (int beginIndex) :
    	返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
        举例:s1.substring(5) 截取s1字符串从索引5开始一直到最后的内容

    - public String substring (int beginIndex, int endIndex) :
        返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。
        举例:s1.substring(5,10) 截取s1字符串从索引5开始一直到索引10之间的内容(包含5,不包含10)
            String s1 = "Hello World";
        // 举例:s.length() 获取s中的字符的数量
        System.out.println(s1.length());//10
        System.out.println("".length());//0
  /*
    转换功能的方法
    - public char[] toCharArray () :把字符串变成对应的字符数组。
        举例:s1.toCharArray() 把s1变成字符数组

    - public byte[] getBytes () :把字符串变成对应的字节数组。
        举例:s1.getBytes() 把s1变成字节数组

    - public String replace (String oldStr, String newStr) :
    	把字符串中的所有的oldStr替换成newStr。
        举例:s1.replace("a","A") 把s1中的所有的"a"替换成"A"
 */      
        
  需求:  键盘录入一个字符串,使用程序实现在控制台遍历该字符串
  public class Demo06BianLi {
    public static void main(String[] args) {
        //1.创建键盘录入Scanner类的对象
        Scanner sc = new Scanner(System.in); 
        //2.获取键盘录入的字符串,保存到String变量str中
        String str = sc.nextLine();

        //3.使用for循环+charAt方法完成字符串的变量
        for (int i = 0; i < str.length(); i++) {
            //获取字符串str中索引为i的字符,保存到char变量ch中
            char ch = str.charAt(i);
            System.out.println(ch);
        }
    }
      
}
##### 拼接字符串
 定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串返回,
        调用该方法, 并在控制台输出结果。 
        例如   数组为 int[] arr = {1,2,3};  执行方法后的输出结果为
        :[1, 2, 3]

    三要素:
        1.方法名称: myToString
        2.是否有未知数据参加运算: int[] array
        3.是否产生结果数据: String 
 */
public class Demo07PinJie {
    public static void main(String[] args) {
        //1.定义int数组array,并初始化
        int[] array = {1, 2, 3};
        //2.调用myToString方法,传递int数组array,获取字符串保存到String变量s中
        String s = myToString(array);
        //3.打印结果数据s
        System.out.println(s);
    }

    //定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串返回
    public static String myToString(int[] array) {
        //1.定义String变量s,用来拼接字符串,初始值"["
        String s = "[";

        //2.使用for循环遍历数组array
        for (int i = 0; i < array.length; i++) {
            //2.1 拼接当前元素
            s = s + array[i];
            //2.2 判断2.1中拼接的元素,如果不是最后一个元素
            if (i != array.length - 1) {
                //2.3 拼接", "
                s = s + ", ";
            }
        }
        //3.for循环结束后,拼接"]"到String变量s的后面
        s = s + "]";

        //4.返回String变量s
        return s;
    }
}
public class Demo04StringConvert {
    public static void main(String[] args) {
        String s1 = "abc";
       
        //举例:s1.getBytes() 把s1变成字节数组
        byte[] bs = s1.getBytes();
        for (int i = 0; i < bs.length; i++) {
            System.out.print(bs[i]+" ");
        }
        System.out.println("----------------");

        //举例:s1.replace("a","A") 把s1中的所有的"a"替换成"A"
        String s2 = "我靠,你他妈有病,你个二货,你个傻叉....";

        String s3 = s2.replace("靠", "*");
        System.out.println(s3);

        String s4 = s3.replace("他妈有病", "****");
        System.out.println(s4);

        String s5 = s4.replace("二货", "**");
        System.out.println(s5);

        String s6 = s5.replace("傻叉", "傻不拉几的");
        System.out.println(s6);
    }
}
统计字符次数 需求:  判断根据ch中的不同类型的字符,给对应的计数器的值增加1 
        //4.1 获取当前字符,保存到char变量ch中
            char ch = str.charAt(i);//获取i作为索引在字符串中对应的字符
             smallCount++;
    创建字符串对象两种方式的区别(理解)
        1.直接new的方式: 字符串变量中直接保存的对内存空间的地址值
         String s1 = new String(chs);
        2.直接""的方式: 字符串变量中直接保存的常量池中字符串常量对象的地址值
           String s3 = "abc"; 
    ==equals的使用: 
        1.基本类型: 比较的是具体的数据值是否相同             
String类的切割方法             

String s1 = "aaa,bbb,ccc,ddd";
String[] "a,b,c,d".split(",")