参考资料:
[1]. Java中获取键盘输入值的三种方法
[2]. <T> T[] toArray(T[] a)的思考
[3]. JAVA 一个或多个空格分割字符串
- 定义数组
Integer[] push = new Integer[]{1,2,3,4,5};
- 定义栈
Stack stack = new Stack<Integer>();
- 定义队列
Queue<E> queue = new LinkedList<E>();
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
remove、element、offer 、poll、peek 其实是属于Queue接口。
-
求数组的最大值
Arrays.stream(dp).max().getAsInt(); -
比较 lambda
用字符串的最后一个字符进行排序
Arrays.sort(strings, Comparator.comparing(a->(int)a.charAt(a.length()-1))); -
输入数字
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
int n = in.nextInt();
if(n < 1)
continue;
}
- Java接受控制台输入的方式
-
char i = (char) System.in.read();
只能读取字符
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
str = br.readLine();
上面的代码的意思是System.in输入字节流,InputStreamReader将字节转化为字符,BufferedReader是一个缓冲流,提升效率用的,不用BufferedReader其实也可以,但是BufferedReader就没有readLine。
只能读取字符串
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
注意nextInt之后还有回车,下一个可能被nextLine吸收,也就是说nextLine会吸收换行符,因为换行符我们可能看不见,所以可能就会跟预期的不一样。
这段代码和上边第三种实现输入方法给出的例子代码区别在于,这段代码先执行nextInit()再执行nextLine(),而第三种方法的例子是先执行nextLine(),再执行nextInit(),当你在运行着两段代码的时候你会发现第三种方法的例子可以实现正常的输入,而这段代码却在输入年龄,敲击enter键后,跳过了输入姓名,直接到了输入工资这里,(可以自己运行代码看看)这是为什么呢?其实,在执行nextInit()函数之后,敲击了enter回车键,回车符会被nextLine()函数吸收,实际上是执行了nextLine()函数吸收了输入的回车符(并不是没有执行nextLine函数),前面讲到和nextLine()功能一样的函数next(),他们的区别就在于:next()函数不会接收回车符和tab,或者空格键等,所以在使用nextLine()函数的时候,要注意敲击的回车符有个被其吸收,导致程序出现BUG!!!
最后小小的总结一下next()和nextLine()的区别:
在java中,next()方法是不接收空格的,在接收到有效数据前,所有的空格或者tab键等输入被忽略,若有有效数据,则遇到这些键退出。nextLine()可以接收空格或者tab键,其输入应该以enter键结束。
如何读取一行多个数字,用任意个空格隔开
使用"\s+"是隔绝多个空格.
/t
相当于tab 缩进
/n
回车
/r
换行
\\s
作为分隔符表示空白
private static Integer[] getTwoNums(){
String line = sc.nextLine();
// 使用一个或者多个空格
String[] splits = line.split("\\s+");
return new Integer[]{Integer.valueOf(splits[0]), Integer.valueOf(splits[1])};
}
连续读取多个整数,忽略换行和空格。
static class InputReader{
private InputStream stream;
private byte[] inbuf=new byte[1024];
private int lenbuf=0;
private int ptrbuf=0;
public InputReader(InputStream stream) {
this.stream=stream;
}
private int readByte() {
if(lenbuf==-1) {
throw new UnknownError();
}
if(ptrbuf>=lenbuf) {
ptrbuf=0;
try {
lenbuf=stream.read(inbuf);
}catch(IOException e) {
throw new UnknownError();
}
if(lenbuf<=0) {
return -1;
}
}
return inbuf[ptrbuf++];
}
public int nextInt() {
int num=0,b;
boolean minus=false;
while((b=readByte())!=-1&&!((b>='0'&&b<='9')||b=='-'))
;
if (b == '-') {
minus = true;
b = readByte();
}
while (true) {
if (b >= '0' && b <= '9') {
num = num * 10 + (b - '0');
} else {
return minus ? -num : num;
}
b = readByte();
}
}
}
- List和Array的互相转化
List->Array:Record[] rs = records.toArray(new Record[0]);(为什么要输入参数new Record[0]
,要获取输出的类型,具体看[2])
Array->List:Arrays.asList(rs);
网友评论