最近在刷牛客的笔试真题,发现居然要自己手写输入输出,于是我就慌了啊!兄弟们,找几个题看看,发现问题不大,反手就来一个记录!希望对即将参加春招、实习和秋招的Java初学者有所帮助,一起加油干吧!打工人!
话不多说,直接上干活!
1、如何引入Scanner?
这里我们从官方的Java学习api中看到这么一段话:一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。 A
Scanner分隔符模式将输入打破到令牌,默认情况下匹配空格。 然后可以使用各种next方法将得到的令牌转换成不同类型的值。
(1)例如,该代码允许用户从System.in读取一个数字:
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
(2) 另一个例子,该代码允许从文件myNumbers中的条目分配long类型:
Scanner sc = new Scanner(new File("myNumbers"));
while (sc.hasNextLong()) {
long aLong = sc.nextLong();
}
(3) 扫描仪也可以使用除空格之外的分隔符。 此示例从字符串读取几个项目:
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
打印以下输出:
1
2
red
blue
(4) 可以使用此代码生成相同的输出,该代码使用正则表达式一次解析所有四个令牌:
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input);
s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)");
MatchResult result = s.match();
for (int i=1; i<=result.groupCount(); i++)
System.out.println(result.group(i));
s.close();
该default whitespace delimiter由扫描仪使用的是由认可Character 。 isWhitespace 。 reset()方法将将扫描仪分隔符的值重置为默认空白分隔符,而不管以前是否已更改。
这里面用的最多的就是第一种方式,所以着重看一下第一种形式!
2、如何读取输入文本?
这里读取输入文本使用的是hasNext()方法。
Scanner sc = new Scanner(System.in);
while(sc.hesNext()){//这里是循环输入,直到输入为空或者无输入
}
3、hasNext()与next()的区别究竟是什么呢?
hasNext()与next()的区别
- 两者均根据空格划分数据
- 两者在没有数据输入时均会等待输入
- next()方法会将空格划分的数据依次输出,运行一次,输出一个
- hasNext()方法会跟着next()方法移动,当前数据不为空,则返回true
- hasNext()返回的是boolean类型而next()返回的是你输入的那个值
案例:
import java.util.*;
public class Main {
public static void main(String []args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){//还在输入就是为true
int n = sc.nextInt();//获取输入行数
String []result = new String[n];
for(int i=0;i<n;i++){
String str = sc.next();//获取当前输入
result[i] = str;
}
Arrays.sort(result);
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
}
sc.close();
}
}