Scanner

  • hasNext() 表示判断下一个输入项是否是字符串, hasNextInt() 表示判断下一个输入项是否是int, 否则返回false

  • next()获取输入项的字符串, nextInt 获取项输入的int

import java.util.Scanner;

public class Demo1_Scanner {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        if( scanner.hasNextInt()) {
            int p = scanner.nextInt();
            System.out.println(p);
        } else {
            System.out.println("输入内容不是int 数字");
        }
        scanner.close();
    }
}

输入1个整数, 1个数字串, 输出数字和字符串, 错误示例

import java.util.Scanner;

public class Demo2_Scanner {
    public static void main(String[] args) {
        // 输入1个整数, 1个字符串的 错误示例
        Scanner sc = new Scanner(System.in);
        int i = sc.nextInt();
        String s = sc.nextLine();
        System.out.println(i+" "+s);
    }
}

输入1个整数, 1个数字串, 输出数字和字符串, 正确示例, 都当成一行字符串, 后期String转成int类型

import java.util.Scanner;
import java.lang.Integer;;
public class Demo2_Scanner {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();
        int i = Integer.parseInt(s1);
        String s2 = sc.nextLine();
        System.out.println(s1+ s2);
    }
}

String 类

  • toString()方法, 没重写前显示包和类名@hashcode()
  • 常量池的string, 没有则创建, 有则使用现有的string
  • 使用new String()则会创建常量的副本
public class Demo2_String {
    public static void main(String[] args) {
        String s1 = new String("abc");
        String s2 = "abc";
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
    }
}
//结果 false ture
  • 使用+号连接的, 是在StringBuffer中连接后, 再把地址指给变量
public class Demo2_String {
    public static void main(String[] args) {
        String s4 = "ab";
        String s5 = s4 + "c";
        System.out.println(s4 == s5);
    }
}
// false

String 其他方法

  • startWith endWith equalsIgnoreCase contains
public class Demo3_String {
    public static void main(String[] args) {
        String sm = "123 sdf z";
        String s1 = "123";
        String s2 = "z";
        String s3 = "123 SDF z";
        String s4 = "sdf";
        String s5 = "sDf";
        System.out.println(sm.startsWith(s1));
        System.out.println(sm.endsWith(s2));
        System.out.println(sm.equalsIgnoreCase(s3));
        System.out.println(sm.contains(s4));
        System.out.println(sm.contains(s5));
        System.out.println(sm.toLowerCase().contains(s4.toLowerCase()));
    }
}
//  T T T T F T

String练习, 模拟用户登录

import java.util.Scanner;

public class Demo4_String {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String name = "";
        String passwd = "";
        for(int i=0;i<3;i++){
            System.out.println("请输入用户名:");
            if( sc.hasNextLine() ){
                name = sc.nextLine();
            }
            System.out.println("请输入用户密码:");
            if( sc.hasNextLine() ){
                passwd = sc.nextLine();
            }
            if( "admin".equals(name) && "admin".equals(passwd) ){
                System.out.println("欢迎"+ name + "登录!");
                break;
            } else {
                if( (2-i)==0 ){
                    System.out.println("请找回密码, 或过1小时后再重试 !");
                } else{
                    System.out.println("用户名或密码错误, 您还有" + (2-i) + "次机会!");
                }
            }
            name = "";
            passwd = "";
        }
        sc.close();
    }
}

String 的方法

  • char charAt(int index) 获取指定索引位置的字符
  • int length() 获取字符串长度
  • int indexOf(int ch) 获取字母在字符串第一次出现的索引
  • int indexOf(String str) 获取字符串第一次出现的出现的索引位置
  • int indexOf( int ch, int fromIndex ) 从指定索引位置向后, 字母ch 第一次出现的索引位置
  • int indexOf( String str, int fromInex ) 从指定索引位置向后, str 第一次出现的索引位置
  • int lastIndexOf(int ch) 最后一次出现字符的索引, 即从后向前找第1次出现字母的索引
  • int lastIndexOf(int ch, int fromIndex) 从指定索引向前找, 字素ch 出现的索引
  • int lastIndexOf(String str)
  • int lastIndexOf(String str, int fromIndex)
  • String substring(int beginIndex) 从索引位置开始到结尾截取字符串
  • String substring(int beginIndex, int endIndex) 从开始索引 到 结束索引位置前(结束索引不包含) 截取字符串
public class Demo5_String {
    public static void main(String[] args) {
        String sm = "Hello Wrold!";
        System.out.println(sm.charAt(0));
        //System.out.println(sm.charAt(20));

        System.out.println(sm.length());

        System.out.println(sm.indexOf('l'));
        System.out.println(sm.indexOf('z'));

        System.out.println(sm.indexOf("Wrold"));
        System.out.println(sm.indexOf("Wrood"));

        System.out.println(sm.indexOf('o',5));

        System.out.println( sm.indexOf( "old", 5 ) );
    }
}
public class Demo6_String {
    public static void main(String[] args) {
        String s = "ET drive UFO! So COOL";

        System.out.println(s.lastIndexOf('O'));

        System.out.println(s.lastIndexOf('O',17));

        System.out.println(s.lastIndexOf("UFO"));

        System.out.println(s.lastIndexOf("So", 9));
    }
}
public class Demo7_String {
    public static void main(String[] args) {
        String s = "PhpIsBest?";
        System.out.println(s.substring(3));

        System.out.println(s.substring(0,3));
    }
}

String 练习, 统计大写, 小写, 数字, 其他字符个数

public class Demo9_String {
    public static void main(String[] args) {
        String s = "C C++ C# Go Java Javascript Php Swift 2021";
        int sumUp    = 0;
        int sumLow   = 0;
        int sumNu    = 0;
        int sumOther = 0;
        for(int i=0;i<s.length();i++){
            char tmpChar = s.charAt(i);
            if( tmpChar <= 'z' && tmpChar >= 'a'){
                sumLow++;
            } else if( tmpChar <= 'Z' && tmpChar >= 'A' ){
                sumUp++;
            } else if( tmpChar <= '9' && tmpChar >= '0' ){
                sumNu++;
            } else if( ' ' == tmpChar ){

            } else {
                sumOther++;
            }
        }
        System.out.println(sumUp+"," + sumLow + "," + sumNu + "," + sumOther);
    }
}

String 的方法

  • byte[] getBytes() 字符串转换为字节数组
  • char[] toCharArray() 字符串转换为字符数线
  • String valueOf(char[] data) 字符数组转化为字符串
  • String valueOf(int i) 把 int 转换为字符串, (valueOf 可以任意类型的数据转化为字符串)
  • String toLowerCase() 字符串转换成小写
  • String toUpperCase() 字符串转换大写
  • concat(String str) 字符串拼接
public class Demo10_String {
    public static void main(String[] args) {
        String s = "Hello";
        byte [] b = s.getBytes();
        for(int i=0;i<b.length;i++){
            System.out.print(b[i]+" ");
        }
        System.out.println();

        char[] c = s.toCharArray();
        for(int i=0;i<c.length;i++){
            System.out.print(c[i] + " ");
        }
        System.out.println();

        String s2 = String.valueOf(c);
        System.out.println(s2);

        String s3 = String.valueOf(10);
        System.out.println(s3);

        System.out.println(s.toLowerCase());

        System.out.println(s.toUpperCase());

        System.out.println(s.concat(" Wrold!"));
    }
}

String 练习, 首字母大写, 其他小写

public class Demo11_String {
    // 字符串首写字母大写, 其他字母小写
    public static void main(String[] args) {
        String s = "what Is A Youth?";
        if(s.length() > 0){
            System.out.println(s.substring(0,1).toUpperCase() + s.substring(1).toLowerCase());
        }
    }
}

String 练习, int [] arr = {1,2,3}; 转换成指定格式 {1, 2, 3}的字符串.

public class Demo12_String {
    // int [] arr = {1,2,3}; 转换成指定格式 {1, 2, 3}的字符串.
    public static void main(String[] args) {
        int [] arr = {1,2,3,4,5};
        String s = "";
        if( 1 == arr.length ){
            s = "{"+ arr[0]+"}";
        }
        if( arr.length > 1 ){
            for (int i=0; i<arr.length; i++) {
                if ( 0 == i ){
                    s = "{" + arr[i] + ", ";
                }
                else if( i < arr.length - 1 ){
                    s = s + arr[i] + ", ";
                }
                else if( i == arr.length-1 ){
                    s = s + arr[i] + "}";
                }
            }
        }
        System.out.println(s);
    }
}

String 中的方法

  • String replace(char oldChar, char newChar) 用新字符替换所有旧的字符
  • String replace(CharSequence target, CharSequence replacement) 使用新字符串替换旧的字符串
  • int compareTo(String anotherString) 比较2个字符串
  • int compareToIgnoreCase(String str) 忽略大小写比较2个字符串
public class Demo13_String {
    public static void main(String[] args) {
        String s = "Switch Mario";

        String s2 = s.replace('i','a');
        System.out.println(s2);

        String s3 = s.replace("Mario", "Zelda");
        System.out.println(s3);

        String s4 = "     switch one  ";
        System.out.println("{"+s4.trim()+"}");

        String s5 = "sEE";
        String s6 = "see";
        int sum = s5.compareTo(s6);
        System.out.println(sum);

        int sum2 = s5.compareToIgnoreCase(s6);
        System.out.println(sum2);
    }
}

String 练习反转字符串

import java.util.Scanner;
public class Demo14_String {
    //反转字符串
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = "";
        String s2 = "";
        if( sc.hasNextLine() ){
            s = sc.nextLine();
        }
        char [] cs = s.toCharArray();
        for (int i=0; i<(cs.length/2); i++) {
            char temp = cs[cs.length-1-i];
            cs[cs.length-1-i] = cs[i];
            cs[i] = temp;
        }
        System.out.println(new String(cs));

        char [] cs2 = s.toCharArray();
        for (int i=cs2.length-1; i>=0; i--) {
            s2 = s2 + cs2[i];
        }
        System.out.println(s2);
    }
}

String 练习, 查找str在另一个str出现的次数

public class Demo15_String {
    public static void main(String[] args) {
        String sMax = "Whatever is worth doing is worth doing well.";
        String sMin = "worth";
        int sum   = 0;
        int j     = 0;
        int index = 0;
        while(index<sMax.length()){
            j = sMax.indexOf(sMin, index);
            if(-1 == j){
                break;
            } else{
                index = j + 1;
                sum++;
            }
        }
        System.out.println(sum);
    }
}