Java教程

Java零基础学习(Scanner类 String类)

本文主要是介绍Java零基础学习(Scanner类 String类),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java零基础学习(Scanner类 String类)

  • Scanner的概述和构造方法原理

1.Scanner的概述
	JDK5之后用于获取用户的键盘输入
2.Scanner的构造方法原理
	Scanner(InputStream soucer)
	System类下有一个静态字段:
		public static final InputStream in;标准的输入流,对应这键盘录入
  • Scanner类的hasNextXxxx()方法和nextXxxx()方法
1.基本格式
	hasNextXxxx() 判断下一个是否是某种类型的元素,其中的Xxxx可以是Int,Double等。
					如果需要判断是否包含下一个字符串,可以省略Xxxx。
	nextXxxx()	  获取下一个输入项。Xxxx可以是Int,Double等。
2.举例
import java.util.Scanner;
public class Scanner1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        //判断下一个类型是部署Int类型。
        if(sc.hasNextInt()){
            int a=sc.nextInt();
        }else{
            System.out.println("你输入的类型不正确");
        }
    }
}
  • Scanner获取数据出现的小问题及解决方案
1.常用的方法
	public int nextInt();获取一个int类型的值
	public String nextLine();获取一个String类型的值
	public String next();获取一个String类型的值
2.案例演示
	a.先录入一个int类型的,在录入一个String类型的值
import java.util.Scanner;
public class Scanner2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个int类型的值");
        int a=sc.nextInt();
        System.out.println(a);
        System.out.println("请输入一个String类型的值");
        String st=sc.nextLine();
        System.out.println(st);
    }
}
结果发现录入整数之后紧接着录入字符串,字符串没有录入,这是因为nextLine()把之前敲的回车当做回车换行录入了
	b.解决方案
	(1)在录入字符串是时,重新创建一个新的Scanner对象,一般采用这种方法。
	(2)使用next方法来录入字符串,弊端就是输入回车换行空格,它不会录入
  • 例题
如果用户输入不正确就让用户重新输入,给五次机会
import java.util.Scanner;
public class Scanner3 {
    public static void main(String[] args) {
        System.out.println("请输入一个整数,一共有五次输入机会");
        for(int i=5;i>0;i--) {
            Scanner sc = new Scanner(System.in);
            if (sc.hasNextInt()) {
                int num = sc.nextInt();
                System.out.println(num);
                return;
            } else {
                if (i==1){
                    System.out.println("你已经没有机会了");
                }else{
                    System.out.println("你输入的类型不正确,请重新输入");
                    System.out.println("你还有" + (i - 1) + "次机会");
                }
            }
        }
    }
}
  • String类的概述

    1.什么是字符串
    	字符串是由多个字符组成的一串数据
    	字符串可以看成字符数组
    2.String类的概述
    	a.字符串字面值"abc"也可以看成是一个字符串对象
    	b.字符串是常量,一旦被创建,就不能被改变
    
    • String类的构造方法
    1.常见构造方法
    	public String();空构造
    	public String(byte[] byte);把字节数组转成字符串;
    	public String(byte[] byte,int index,int length);把字节数组的一部分转成字符串,(index:表示的是从第几个索引开始,length表示的是长度)
    	public String(char[] value);把字符数组转化成字符串;
    	public String(char[] value,int index,int count);把字符数组的一部分转化成字符串;
    	public String(String original);把字符串常量值转化成字符串
    2.演示
    	public class String1 {
        public static void main(String[] args) {
            byte[] bytes = {97, 98, 99, 100};
            //将字节数组转换成字符串
            String s = new String(bytes);
            System.out.println(s);
            //把字节数组的一部分转化成字符串
            String s1 = new String(bytes, 2, 2);
            System.out.println(s1);
        }
    }
    
    • String的特点,一旦被创建就不能改变
    1.String的特点
    	一旦被创建就不能改变,因为字符串的值是在堆内存的常量池中划分空间,分配地址值的
    2.演示
    	如何理解这句话
    		String st="hello";
    		s="world"+"java";
    		s的结果是woaijava,内容不能变,引用可以变。
    
    • String类的常见面试题
    1.String s=new String("Hello")和String s="hello";的区别
    	String s=new String("Hello")是创建了两个对象,s是指向new出来的String类对象,然后这个对象指向Hello 
    	String s="hello"只创建了一个对象,s直接指向"hello"。
    
    • 内存图

    2.==和equals()的区别
    	==如果比较基本数据类型,就是比较值的大小,如果比较引用数据类型,就是比较地址值是否相等
    	equals()没有被重写是比较两个对象是否是同一个对象,如果被重写,就根据被重写的内容执行
    3.看程序写结果
    	String s1 = new String("hello");
    	String s2 = new String("hello");
    	System.out.println(s1 == s2);
    	System.out.println(s1.equals(s2));
    
    	String s3 = new String("hello");
    	String s4 = "hello";
    	System.out.println(s3 == s4);
    	System.out.println(s3.equals(s4));
    
    	String s5 = "hello";
    	String s6 = "hello";
    	System.out.println(s5 == s6);
    	System.out.println(s5.equals(s6));
    false	true
    false	true
    true	true
    ==是判断两个地址值是否相同,当指向同一地址值时,为true不同时为false
    equals()被String方法重写之后是判断两个字符串字面值是否相同
    
    • String类的判断功能
    public boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
    public boolean equalsIgnoreCase(String str):比较两个字符内容是否相同,不区分大小写
    public boolean contains(String str):判断字符串中是否包含传递进来的字符串
    public boolean startsWith(String str):判断字符串是否以传递进来的字符串开头
    public boolean endsWith(String str):判断字符串是否以传递进来的字符串结尾
    public boolean isEmpty():判断字符串是否为空串
    
    • 模拟用户登录
    模拟登录,给三次机会,并且提示还有几次机会
    package demo3;
    import java.util.Scanner;
    public class String1 {
        public static void main(String[] args) {
            String name="张三";
            String mima="123456";
            for (int i=3;i>0;i--) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入用户名");
                String st=sc.nextLine();
                System.out.println("请输入密码");
                String str=sc.nextLine();
                if (st.equals(name) && str.equals(mima)) {
                    System.out.println("输入正确");
                    break;
                } else {
                    if (i==1){
                        System.out.println("你的机会已经用完");
                    }else {
                        System.out.println("用户名或者密码输入错误,请重新输入,你还有" + (i - 1) + "次机会");
                    }
                }
            }
        }
    }
    
    
    • String的获取功能
    1.String类的获取功能
    	public int length():获取字符串的长度
    	public char charAt(int index):获取指定索引位置处的字符
    	public int indexOf(int ch):返回指定字符在此字符串中出现的第一次索引
    	public int indexOf(String Str):返回指定字符串在此字符串中出现的第一次索引
    	public int indexOf(int ch,int fromIndex):返回指定字符在此字符串中指定位置后第一次出现的索引。
    	public int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现的索引。
    	public int lastIndexOf(String str,int fromIndex):返回指定字符串在次字符串中最后一次出现的索引,从指定位置反向搜索。
    	其他的lastIndexOf系列方法和indexOf方法也是相同用法
    	public String substring(int start):从指定位置开始截取字符串,默认到末尾。
    	public String substring(int start,int end):	从指定位置开始到指定位置结束截取字符串。
    
    • 遍历字符串
    public class String3 {
        public static void main(String[] args) {
            String str="fdfqgqqgqg3ggq";
            for (int i=0;i<str.length();i++){
                char a=str.charAt(i);
                System.out.println(a);
            }
        }
    }
    
    • 统计不同类型字符串的个数
    统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。
    package demo3;
    import jdk.management.resource.internal.inst.FileOutputStreamRMHooks;
    public class String4 {
        public static void main(String[] args) {
            String st="fdwhuigHUIIHIguigyeHUIGgT66799";
            int a=0;
            int A=0;
            int num=0;
            for (int i=0;i<st.length();i++){
                char ch=st.charAt(i);
                //当字符在a--z之间是,a就加一
                if (ch>='a'&&ch<='z'){
                    a++;
                }
                //当字符在A--Z之间是,A就加一
                if (ch>='A'&&ch<='Z'){
                    A++;
                }
                //当字符在0--9之间时,num就加一
                if (ch>='0'&&ch<='9'){
                    num++;
                }
            }
            System.out.println("小写字母出现了"+a+"次");
            System.out.println("大写字母出现了"+A+"次");
            System.out.println("数字出现了"+num+"次");
        }
    }
    
    • String类的转换功能
    	public byte[] getBytes():把字符串转换为字节数组。
    	public char[] toCharArray():把字符串转换为字符数组。
    	public static String valueOf(char[] chs):把字符数组转成字符串。
    	public static String valueOf(int i):把int类型的数据转成字符串。
    		注意:String类的valueOf方法可以把任意类型的数据转成字符串。
    	public String toLowerCase():把字符串转成小写。
    	public String toUpperCase():把字符串转成大写。
    	public String concat(String str):把字符串拼接。
    
    • 按要求转换字符
    把一个字符串的首字母转成大写,其余为小写
    public class String5 {
        public static void main(String[] args) {
            String str="fsafwgFGRGawqgGWGsdawgQGH";
            String s=str.substring(0,1).toUpperCase().concat(str.substring(1).toLowerCase());
            System.out.println(s);
        }
    }
    
    • String类的其他功能
    1.String的替换功能
    	public String replace(char old,char new)将指定字符进行互换
    	public String replace(String old,String new)将指定字符串进行互换
    2.String去字符串两边空格
    	public String trim()去除两端空格
    3.String按照字典顺序比较两个字符串
    	public int compareTo(String str) 对照ASCII码表 从第一个字母进行减法运算 返回的就是这个减法的结果
    	如果前几个字符一样会根据两个字符串的长度进行减法运算,返回的就是这个减法的结果
    	如果两个字符串一模一样,返回的就是0
    	public int compareToIgnoreCase(String str)跟上面一样 只是忽略大小写的比较
    
    • 把数组转换成字符串
    需求:把数组中的数据按照指定个格式拼接成一个字符串
    		举例:
    			int[] arr = {1,2,3};	
    		拼接结果:
    			"[1, 2, 3]"
    public class String6 {
        public static void main(String[] args) {
            int arr[]={1,2,3,4,5,6};
            String st="[";
            for (int i=0;i<arr.length;i++){
                if (i==arr.length-1){
                    st=st+arr[i]+"]";
                    break;
                }
                st=st+arr[i]+", ";
            }
            System.out.println(st);
        }
    }
    
    • 字符串的反转
    需求:把字符串反转
    		举例:键盘录入"abc"		
    		反转结果:"cba"
    import java.util.Scanner;
    public class String7 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个字符串");
            String str=sc.nextLine();
            String st="";
            for (int i=str.length()-1;i>=0;i--){
                st=st+str.charAt(i);
            }
            System.out.println(st);
        }
    }
    
    • 统计大串中小串出现的次数
    需求:统计大串中小串出现的次数
    	举例: "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun" 中java出现了5次
    public class String8 {
        public static void main(String[] args) {
            String st="woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
            int a=0;
            int b=0;
            while (b!=-1){
                b=st.indexOf("java",b+4);
                    a++;
            }
            System.out.println(a-1);
        }
    }
    

    总结

    今天学习了Scanner类和String类,学到了很多的常用方法,因为方法比较多,所以之后一定要经常练。

这篇关于Java零基础学习(Scanner类 String类)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!