Scanner:一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
从键盘获取int或float数据
package TopPackage;
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner sc =new Scanner(System.in);
if(sc.hasNextInt())
{
System.out.println(sc.nextInt());
}
if(sc.hasNextFloat())
{
System.out.println(sc.nextFloat());
}
}
}
输入:5 5.5
输出:5 5.5
使用next方法
package TopPackage;
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner sc =new Scanner(System.in);
if(sc.hasNext())
{
System.out.println("输入的数据为:"+sc.next());
}
}
}
输入:name xiaoming
输出:输入的数据为:name 从中可以看到 xiaoming 字符串并没有输出
使用nextLine方法
package TopPackage;
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner sc =new Scanner(System.in);
if(sc.hasNextLine())
{
System.out.println("输入的数据为:"+sc.nextLine());
}
}
}
输入:name xiaoming
输出:输入的数据为:name xiaoming 从中可以看到 xiaoming 字符串输出了
next()与nextLine()区别
next():
- 一定要读取到有效字符后才可以结束;
- 对输入有效字符之前的空白,自动将其去掉
- 只有输入有效字符之后才将其后面输入的空白作为分隔符或者结束符;
- next()不能得到带有空格的字符串。
nextLine():
- 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符,包括空白;
- 可以得到带有空格的字符串。
案例一:输入一行整数,数字之间用空格隔开,将数据保存到整型数组 data[] 中并打印
输入:3 5 8 1 2 9 6 7 4 0
方法一:用String.split()方法实现
package TopPackage;
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner sc =new Scanner(System.in);
String[] str=null;
if(sc.hasNextLine())
{
str=sc.nextLine().trim().split(" "); //用String.split()方法去除字符串前面和尾部的空白
}
int[] data=new int[str.length];
for(int i=0;i<str.length;i++)
{
data[i]=Integer.parseInt(str[i]);
}
System.out.println("输入的数据为:");
for(int j=0;j<data.length;j++)
{
System.out.print(data[j]);
}
}
}
输出为:
3 5 8 1 2 9 6 7 4 0
输入的数据为:
3581296740
方法二:用StringTokenizer类分解输入的整行得到的带空格的字符串。
package TopPackage;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args)
{
Scanner sc =new Scanner(System.in);
StringTokenizer st=new StringTokenizer(sc.nextLine());
int data[] =new int[st.countTokens()];
for(int i=0;i<data.length;i++)
{
data[i]=Integer.parseInt(st.nextToken());
}
System.out.println("输入的数据为:");
for(int j=0;j<data.length;j++)
{
System.out.print(data[j]);
}
}
}
输出为:
3 5 8 1 2 9 6 7 4 0
输入的数据为:
3581296740
StringTokenizer类
三个构造函数:
- StringTokenizer(String str) 构造解析str的StringTokenizer,默认分隔符:空格、制表符('\t')、换行符('\n')和回车符('\r');
- StringTokenizer(String str,String delim) 构造解析str的StringTokenizer对象,指定一个分隔符delim;
- StringTokenizer(String str,String delim,boolean returnDelims) 构造解析str的StringTokenizer对象,并指定一个分隔符delim,当returnDelims为true时,则分隔符也作为标记返回。
方法:
int countTokens():返回nextTokens方法被调用的次数。如果是后两个构造函数,返回的是分隔符的数量。
String nextToken():返回从当前位置到下一个分隔符之间的字符串。