博主最近准备面试,发现很多公司机考题跟LeetCode不一样,不是只是关注核心逻
辑部分,而是连测试数据都要自行控制台输入;那么为了避免对Scanner类常用方法不熟的同学遇到不必要的麻烦,今天准备收集一下Scanner的常用操作。
通常用比较多的就是s.nextLine(),获取当前行的内容 让后光标停留在下一行。
如何控制输入的行数呢?无非就是通过控制循环的次数。
- 常用的while然后指定输入的哪一个字符就跳出循环
- for循环也可以,先nextLine获取一个控制循环的次数
- 当然if也可以,道理跟while一样
下面简单一个例子:
public class MyScanner {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int length = Integer.parseInt(s.nextLine());
String[] strs = new String[length];
for(int i=0;i<length;i++){
strs[i] = s.nextLine();
}
Arrays.sort(strs);
for(String str : strs){
System.out.println(str);
}
while(s.hasNextLine()){
String out = s.nextLine();
if (!out.equals("stop"))
System.out.println(out);
else break;
}
System.out.println("Scanner test over!");
}
}
另外用到哪些包需要import一下,不然编译不通过;另外如果自己本地编辑器结果没问题,但是机考的有问题,可以检查一下自己的代码 最好换一个思路。。。
有时候就是注意加上while(s.hasNextLine()){},大神解释是可能某个网站判定需要测试多组,所以最好加上,例如:牛客上的
public class MyScanner {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
while(s.hasNextLine()) {
int lineNum = Integer.parseInt(s.nextLine());
String[] strs = new String[lineNum];
for (int i = 0; i < lineNum; i++) {
String str = s.nextLine();
if (str == null || str.length() == 0) {
strs[i] = str;
continue;
}
if (str.length() < 100)
strs[i] = str;
}
List<String> list = new ArrayList<>();
for (String str : strs) {
if (str.length() > 8) {
for (String string : getSubstring((str.length() - 1) / 8 + 1, str)) {
list.add(string);
}
} else if (str.length() < 8)
list.add(str + "00000000".substring(0, 8 - str.length()));
else list.add(str);
}
list.forEach(System.out::println);
}
}
private static String[] getSubstring(int length, String string){
String[] strings = new String[length];
for(int j=0;j<length-1;j++){
strings[j] = string.substring(j*8, (j+1)*8);
}
if(string.length()>1){
String last = string.substring((length-1)*8);
strings[length-1] = last + "00000000".substring(0,8-last.length());
}
return strings;
}
}