JAVASE基础模块十五(scanner类 String类 String 方法

JAVASE基础模块十五(scanner类 String类 String 方法)

scanner类

  1. Scanner(InputStream source) 构造一个新的scanner 它生成的值是从指定的输入流扫描的

  2. in public static final InputStream in 标准输入流 此流已打开并准备提供输入数据

  3. nextxxx的方法

    • scanner.nextInt();
    • scanner.nextDouble();
    • scanner.nextLine();
  4. 使用hasNextInt()输入数据是否符合我们得需求

    import java.io.InputStream;
    import java.util.Scanner;
    
    public class Scan {
        public static void main(String[] args) {
    
            InputStream in = System.in;
            Scanner scanner = new Scanner(in);
            System.out.println("请输入数据");
            if (scanner.hasNextInt()) {
                int i = scanner.nextInt();
            } else {
                System.out.println("输入的类型有误");
            }
            scanner.close();
        }
    }
    请输入数据
    k
    输入的类型有误
    
    Process finished with exit code 0
    请输入数据
    5
    
    Process finished with exit code 0
    
  5. 当你先录入整数使用nextline再录入字符串时 会发现字符串没让你录入

    • 原因是 回车换行被默认当做字符串录入
    • 解决方法
      1. 录字符串时再创建一个scanner对象
      2. 可以使用next()方法来录入字符串 sc.next()方法
      3. sc.next()方法 不会录入空格 从空格后就不会录入
    import java.util.Scanner;
    
    public class Scan {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int i;
            System.out.println("请输入数据1");
            while (true) {
                try {
                    i = scanner.nextInt();
                    System.out.println(i);
                    break;
                } catch (Exception e) {
                    System.out.println("输入的类型有误");
                    System.out.println("请再次输入");
                    scanner = new Scanner(System.in);
                }
            }
            Scanner scannerxx = new Scanner(System.in);
            System.out.println("请输入数据2");
            while (true) {
                try {
                    String s = scannerxx.nextLine();
                    System.out.println(s);
                    break;
                } catch (Exception e) {
                    System.out.println("输入的类型有误");
                    System.out.println("请再次输入");
                    scannerxx = new Scanner(System.in);
                }
            }
    
            Scanner scannerx = new Scanner(System.in);
            System.out.println("请输入数据3");
            while (true) {
                try {
                    String s = scannerx.next();
                    System.out.println(s);
                    break;
                } catch (Exception e) {
                    System.out.println("输入的类型有误");
                    System.out.println("请再次输入");
                    scannerx = new Scanner(System.in);
                }
            }
            scanner.close();
            scannerx.close();
        }
    }
    运行结果:
    请输入数据1
    k
    输入的类型有误
    请再次输入
    k
    输入的类型有误
    请再次输入
    5
    5
    请输入数据2
    ccc   vvc  cc
    ccc   vvc  cc
    请输入数据3
    ccc ccc cccddd  ff
    ccc
    
    Process finished with exit code 0
    
  6. 将此方法抽成工具类

import java.util.Scanner;

public class ScannerUtils {
    private ScannerUtils() {
    }
    public  static  int geiNum(Scanner scanner){
        int i;
        System.out.println("请输入数据1");
        while (true) {
            try {
                i = scanner.nextInt();
                System.out.println(i);
                break;
            } catch (Exception e) {
                System.out.println("输入的类型有误");
                System.out.println("请再次输入");
                scanner = new Scanner(System.in);
            }
        }
        return i;
    }
}
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = ScannerUtils.geiNum(scanner);

    }
}
运行结果:
请输入数据1
h
输入的类型有误
请再次输入
g
输入的类型有误
请再次输入
f
输入的类型有误
请再次输入
d
输入的类型有误
请再次输入
s
输入的类型有误
请再次输入
d
输入的类型有误
请再次输入
5
5

进程已结束,退出代码0

String类

  • 定义 字符串 就是由一个或者多个字符组成的序列

  • 字符串可以看做是字符数组 每一个字符从左往右编有索引 从0开始

  • String类代表字符串

    1. Java程序中所有的字符串字面值都作为此类的实例实现

      "abc".length();//获取字符串长度
      
    2. 字符串是常量 它们的值在创建后不能更改

      public class Chang {
          public static void main(String[] args) {
              String s="hello";
              s="world"+"java";
              System.out.println(s);
          }
      }
      运行结果:
      worldjava
      
      进程已结束,退出代码0
      

在这里插入图片描述

 + 理解是 字符串创建后便存在一个独立的地址空间 进行字符串的变换其实是重新创建一个新地址空间存放新字符串 然后对象指向新地址空间 原地址空间内的字符串并没有被改变
  • String()初始化一个新创建的String对象 使其表示一个空字符序列

  • String类重写了父类的toString方法 打印的是字符串字面值

    public class Str {
        public static void main(String[] args) {
            String s = new String("asdfdg");
            System.out.println(s);
        }
    }
    运行结果:
    asdfdg
    
    进程已结束,退出代码0
    
  • public String(byte[] bytes);把字节数组转换string字符串

    import java.lang.reflect.Array;
    
    public class Str {
        public static void main(String[] args) {
            byte[] bytes={-26,-120,-111,97,99,103,105,65};
            String s1 = new String(bytes);
            System.out.println(s1);
            String s3 = new String(bytes,0,3);
            System.out.println(s3);
    
            byte[] bytesx="我".getBytes();
            byte[] bytesxx="爱".getBytes();
            byte[] bytesxxx="你".getBytes();
            String s2 = new String(bytesx);
            System.out.println(Array.getByte(bytesx,0));
            System.out.println(Array.getByte(bytesxx,0));
            System.out.println(Array.getByte(bytesxxx,0));
    
        }
    }
    运行结果:
    我acgiA
    我
    -26
    -25
    -28
    
    进程已结束,退出代码0
    
  • 把字符数组转换成字符串

    public class Cha {
        public static void main(String[] args) {
            char[] charx={'我','爱','你'};
            String s1 = new String(charx);
            System.out.println(s1);
            String s2 = new String(charx,0,1);
            System.out.println(s2);
        }
    }
    运行结果:
    我爱你
    我
    
    进程已结束,退出代码0
    
  • 面试题解析 有何区别

    public class Chang {
        public static void main(String[] args) {
            String s = new String("abc");
            String s1="abc";}}
    1. 创建了两个对象 s--2--1:abc
    2. 创建了一个对象s1---1:abc
    public class Chang {
        public static void main(String[] args) {
            String s = new String("abc");
            String s1="abc";
            String s2="abc";
            System.out.println(s==s1);
            System.out.println(s1==s2);}}
    1. false 两者地址值不同
    2. true 优化 abc在字符串常量池中不会再次创建 占用内存 直接引用
    

在这里插入图片描述在这里插入图片描述

  • string类已经重写了equals()方法 不再比较地址值 而是比较字符串值

  • intern() 取出这个字符串常量的在内存池的地址值

String 方法

  • equals()方法 判断两个字符串字面上内容是否相等 区分大小写
public class Chang {
    public static void main(String[] args) {
        String s = new String("abc");
        String s1="abc";
        String s2="Abc";
        System.out.println(s.equals(s1));
        System.out.println(s2.equals(s1));
    }
}
运行结果:
true
false

进程已结束,退出代码0
  • equalsIgnoreCase()
public class Chang {
    public static void main(String[] args) {
        System.out.println("abc".equals("abc"));
        System.out.println("Abc".equalsIgnoreCase("abc"));
    }
}
运行结果:
true
true

进程已结束,退出代码0
  • isEmpty()
public class Chang {
    public static void main(String[] args) {
        String s="";
        System.out.println(s.isEmpty());
    }
}
运行结果:
true

进程已结束,退出代码0
  • public class Chang {
        public static void main(String[] args) {
            String s="弎屲";
            System.out.println(s.startsWith("弎"));
            System.out.println(s.endsWith("弎"));
            System.out.println(s.contains("屲"));
        }
    }
    运行结果:
    true
    false
    true
    
    进程已结束,退出代码0
    
  • import java.util.Scanner;
    
    public class X {
        public static void main(String[] args) {
            String name = "yuexi";
            int pas = 6548231;
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入用户名");
            for (int i = 0; i < 99; i++) {
                String ad = sc.nextLine();
                sc = new Scanner(System.in);
                if (ad.equals(name)) {
                    System.out.println("用户名输入正确");
                    System.out.println("请输入密码");
                    break;
                } else {
                    System.out.println("用户名输入错误");
                    System.out.println("请重新输入");
                }
            }
            Scanner scx = new Scanner(System.in);
            for (int i = 0; i < 3; i++) {
                int nu = scx.nextInt();
                scx = new Scanner(System.in);
                if (nu == pas) {
                    System.out.println("密码输入正确");
                    System.out.println("登录成功");
                    break;
                } else {
    
                    if (i < 2) {
                        System.out.println("密码输入错误");
                        System.out.println("您还剩" + (3 - i) + "次机会,请重新输入");
                    } else {
                        System.out.println("您已被冻结");
                    }
                }
            }
        }
    }
    运行结果:
    请输入用户名
    yue
    用户名输入错误
    请重新输入
    yie
    用户名输入错误
    请重新输入
    yuexi
    用户名输入正确
    请输入密码
    5648231
    密码输入错误
    您还剩3次机会,请重新输入
    6548231
    密码输入正确
    登录成功
    
    进程已结束,退出代码0
    
  • charAt() 获取字符串的单个字符

public class Cd {
    public static void main(String[] args) {
        System.out.println("abc".length());
        String d="我爱你";
        System.out.println(d);
        System.out.println(d.charAt(0));
        System.out.println(d.charAt(1));
        System.out.println(d.charAt(2));
    }
}
运行结果:
3
我爱你
我
爱
你

进程已结束,退出代码0
  • indexof() 获取字符在字符串的索引
public class Cd {
    public static void main(String[] args) {
        System.out.println("abc".length());
        String d="我爱你";
        System.out.println(d);
        System.out.println(d.indexOf('我'));
        System.out.println(d.indexOf('爱'));
        System.out.println(d.indexOf('你'));
    }
}
运行结果:
3
我爱你
0
1
2

进程已结束,退出代码0
从指定索引处查找
public class Cd {
    public static void main(String[] args) {
        String d="我爱你我爱你我爱你";
        System.out.println(d);
        System.out.println(d.indexOf('我',d.indexOf("我")+1));
    }
}
运行结果:
我爱你我爱你我爱你
3

进程已结束,退出代码0
  • substring() 截取字符串
public class Cd {
    public static void main(String[] args) {
        String d="我爱你一生一世";
        System.out.println(d);
        System.out.println(d.substring(3,7));
    }
}
运行结果:
我爱你一生一世
一生一世

进程已结束,退出代码0
  • 遍历字符串
public class Cd {
    public static void main(String[] args) {
        String d="姐姐,山有木兮木有枝";
         System.out.println(d);
        for (int i = 0; i <d.length() ; i++) {
            System.out.print(d.charAt(i)+"\t\t");
        }
    }
}
运行结果:
姐姐,山有木兮木有枝
姐		姐		,		山		有		木		兮		木		有		枝		
进程已结束,退出代码0
  • 大小写字母统计
public class Tj {
    public static void main(String[] args) {
        String str="gyfgagfuwhufhuAAEDDDFFDS";
        int m=0,n=0;
        for (int i = 0; i < str.length(); i++) {
            char ch=str.charAt(i);
            if(ch>='a'&&ch<='z'){
                m++;
            }else if(ch>='A'&&ch<='Z'){
                n++;
            }
        }
        System.out.println("大写字母"+m);
        System.out.println("小写字母"+n);
    }
}
运行结果:
大写字母14
小写字母10

进程已结束,退出代码0
  • toUpperCase()
  • toLowerCase()
  • 数组转换
public class Cd {
    public static void main(String[] args) {
        String d="山有木兮木有枝";
        byte[] b=d.getBytes();
        System.out.println(d);
        for (int i = 0; i <d.length() ; i++) {
            System.out.print(b[i]+"\t\t");
        }
        System.out.println();
        String s=new String(b);
        System.out.println(s);
        String dd="我爱你";
        char[] c = dd.toCharArray();
        for (int i = 0; i <dd.length() ; i++) {
            System.out.print(c[i]+"\t\t");
        }
        System.out.println();
        String s1=new String(c);
        System.out.println(s1);
    }
}
运行结果:
山有木兮木有枝
-27		-79		-79		-26		-100		-119		-26		
山有木兮木有枝
我		爱		你		
我爱你

进程已结束,退出代码0
  • valueof() 把很多种类型转换成字符串
  • concat() 拼接字符串
  • 首字母大写 其余小写
public class Tj {
    public static void main(String[] args) {
        String str="gyDDfgagfEDuFFDSfhuAA";
        System.out.println(str);
        System.out.println(str.substring(0, 1).toUpperCase().concat(str.substring(1).toLowerCase()));
    }
}
运行结果:
gyDDfgagfEDuFFDSfhuAA
Gyddfgagfeduffdsfhuaa

进程已结束,退出代码0

  • replace() 替换

    public class Th {
        public static void main(String[] args) {
            String s="弎屲与海";
            String s1=s.replace("弎屲", "月习").replace("海", "山");
            System.out.println(s);
            System.out.println(s1);
    
        }
    }
    运行结果:
    弎屲与海
    月习与山
    
    进程已结束,退出代码0
    
    
  • trim() 去除字符串的两端空格

public class Th {
    public static void main(String[] args) {
        String s="      弎屲     与海       ";
        System.out.println(s.trim());


    }
}
运行结果:
弎屲     与海

进程已结束,退出代码0

待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值