目录
今天练习算法时候,需要读取多条带有空格的字符串,于是我使用nextLine()【为什么不使用next()的方法,我在后面会说明】,但是当我设置了输入2个包含空白字符串的内容时候,发现只能输入一行数据,然后就停止了。
当输入数据调用的是nextLine()方法时结果:
可以看到第一个数组在没有输入的数据的情况下就被跳过了。
然后我换了一下方法:
当输入数据调用的是next()方法时结果:
可以看到虽然2个数组都有值,但是有2个问题,第一我数据还没输入第二行,第二我数据第一行也没有显示完整
nextLine():nextLine()的是只有读取到Enter键,即nextLine()方法返回的是Enter键之前的所有字符。所以当我输入读取的个数为2的时候,按下了enter键,nextLine()读取到了就结束了第一条信息的输入。
next():是当读取到空格、tap键、回车键就停止读取信息,所以才会造成第二张图我第一条信息为什么没有读取完整,以及我数据为什么没有读取第二条信息。
理解了这个原理,于是很简单的就想出了解决方法【呵呵呵呵呵呵!!!你猜我信不信很简单】,我到现在都没理解我输入数组的个数使用的是nextInt()方法,为什么回车会保存到我后面要输入的数组数据里面。
解决方法是在输入数据前,输入一个无用数据,抵消掉enter【无法理解】
实例
public class text { private static int num=0; private static String [] numResoult=null; public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.print("设置输入数据的个数:"); num=scanner.nextInt(); if (num>0 && num<10){ numResoult=new String[num]; for (int i=0;i<num;i++){ System.out.println("输入第"+i+"行数据"); //next()用于抵消掉nextLine()的影响 numResoult[i] = scanner.next(); numResoult[i]=scanner.nextLine(); } for (int i=0;i<num;i++){ System.out.println("numResoult["+i+"]===="+numResoult[i]); } } } }
结果截图:
看上面的最后的图片结果可知,第一行数据的324丢失,第二行数据的42丢失;这是由于数据的第一行被next方法获取走了
这个解决方法,我们可以把next获取的数据重新和nextLine方法获取的数据一起拼凑在一起,好有道理啊,我先把数据输进去,然后由于失误丢失了一个数据,然后把数据找回来,拼凑在一起,接着在重新计算;这种多此一举的行为,我实在无言再说了。直接换输入方法,用BufferedReader.readLine()可以完美解决这个问题
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class text { private static String numRead=null; private static int num=0; private static String [] numResoult=null; public static void main(String[] args) { BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in)); System.out.print("设置输入数据的个数:"); try { numRead=bufferedReader.readLine(); System.out.println(numRead); } catch (IOException e) { e.printStackTrace(); } num=Integer.parseInt(numRead); if (num>0 && num<10){ numResoult=new String[num]; //输入 for (int i=0;i<num;i++){ System.out.println("输入第"+i+"行数据"); try { numResoult[i]=bufferedReader.readLine(); } catch (IOException e) { e.printStackTrace(); } } //输出 for (int i=0;i<num;i++){ System.out.println("numResoult["+i+"]===="+numResoult[i]); } } } }
效果截图