输入:若每输入一个对应的值就回车时;程序输出结果如下图所示:
nextLong() , nextFloat() , nextDouble() , nextBigInteger()等多种方法,这些方法可以直接获取键盘输入的长整型,浮点型,双精度型,大整数(实际上其本质就是字符串)等等
但是如果提前把所有要输入的值一次性输入再按回车时: 这是因为:输入有效字符之后nextXxx()会将其后面输入的空白作为分隔符或者结束符。后面的值就会留给下一次的nextXxx()输入。
两者都可以从键盘中获得字符串。 但是需要注意next() 与 nextLine() 区别:
1)对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符:
import java.util.Scanner; public class InputStream { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str1 = scanner.next(); System.out.println("str1="+str1); String str2 = scanner.nextLine(); System.out.println("str2="+str2); System.out.println("输入完毕"); } }当我向键盘输入" hello world hi world"时,程序运行的结果如下图:
2)next()不能吸收回车符,nextLine()可以吸收回车符:
import java.util.Scanner; public class InputStream { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入一个字符串:"); String str1 = scanner.nextLine(); System.out.println("str1="+str1); System.out.println("输入一个字符:"); String str2 = scanner.next(); System.out.println("str2="+str2); } }当我按照上面的程序用键盘输入时,运行结果没有任何问题:
当我把nextLine()和next()的位置互相调换一下时:
import java.util.Scanner; public class InputStream { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("输入一个字符:"); String str1 = scanner.next(); System.out.println("str1="+str1); System.out.println("输入一个字符串:"); String str2 = scanner.nextLine(); System.out.println("str2="+str2); System.out.println("输入完毕"); } }但是运行结果:
以Enter作为结束符,返回读取键盘输入的结果(以字符串的形式),会抛出 IOException 。 相比于Scanner,速度快是快了,但是在处理数据方面变得更麻烦了,好在JDK给我们提供了很多方法来处理数据,下面给出比较常用的方法:
String----->intInteger.parseInt(String str)int----->Stringint +"" / String.valueOf(int i)String----->charString.charAt(index)char----->StringString.valueOf(char)Stringr----->char[]String.toCharArray() / String str.spilt(“str”)char[]----->StringString.valueOf(char [])注意在使用 String str.spilt(“str”) 这个方法时: split表达式,其实就是一个正则表达式。【 * ^ | 】等符号在正则表达式中属于一种有特殊含义的字符,如果使用此种字符作为分隔符,必须使用转义符即【 \ 】加以转义。因为 \ 本身也是转义字符,因此 \ 才能表示成 \ 。
以下参考自:java StreamTokenizer使用
可以获取输入流并将其分析为Token(标记),它的的nextToken方法读取下一个标记默认情况下,StreamTokenizer认为下列内容是Token:字母、数字、除c和c++注释符号以外的其他符号。如符号“/”不是Token,注释后的内容也不是,而"/"Token。单引号和双引号以及其总的内容,只能算一个Token。为了提高效率,使用BufferedReader,如下,创建StreamTokenizer对象 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.StreamTokenizer; pulic class InputTest{ public static void main(String[] args){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StreamTokenizer st = new StreamTokenizer(br); } 为了从流中获取标记,可以调用StreamTokenizer的nextToken()方法。 调用nextToken()方法以后,如果标记是字符串,可用 String s=st.sval,如果是整数用 int n=(int) st.nval得到。st.navl默认解析出的格式是double st.nextToken(); int i=(int) st.nval; //st.navl默认解析出的格式是double st.nextToken(); int j=(int) st.nval; st.nextToken(); String s=st.sval;