国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java Scanner類中的next方法和nextLine方法連用時要注意的地方

2019-11-17 03:59:22
字體:
來源:轉載
供稿:網友
這里討論的是關于java scanner類中的next方法和nextLine方法。     什么是next()和nextLine()方法?

   問題出現:

   先看以下代碼:   一個簡單的控制臺輸入和輸出:

   view plaincopy to clipboardPRint?
package cn.nileader.app.vi;   
import java.util.Scanner;   
public class Test {   
    public static void main(String[] args) throws Exception{   
        Scanner cin = new Scanner(System.in);   
        String  ni = cin.nextLine();   
            System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());   
        ni = cin.nextLine();   
        System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());   
    }   
}  
package cn.nileader.app.vi;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
        String  ni = cin.nextLine();
System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());
    ni = cin.nextLine();
    System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());
}
}


   再看下面的代碼:

   view plaincopy to clipboardprint?
package cn.nileader.app.vi;   
import java.util.Scanner;   
public class Test {   
    public static void main(String[] args) throws Exception{   
        Scanner cin = new Scanner(System.in);   
        String  ni = cin.next();   
            System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());   
        ni = cin.next();   
        System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());   
    }   
}  
package cn.nileader.app.vi;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
        String  ni = cin.next();
System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());
    ni = cin.next();
    System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());
}
}

   以上段代碼都是正確、無聊的。

      精彩的來了……

    運行下面的代碼:

    view plaincopy to clipboardprint?
package cn.nileader.app.vi;   
import java.util.Scanner;   
public class Test {   
    public static void main(String[] args) throws Exception{   
        Scanner cin = new Scanner(System.in);   
        String  ni = cin.next();   
            System.out.println("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());   
        ni = cin.nextLine();   
        System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());   
    }   
}   
package cn.nileader.app.vi;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
        String  ni = cin.next();
System.out.println("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());
    ni = cin.nextLine();
    System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());
}
}  

    運行結果如下:

    ni掌柜
    用Scanner類的next()方法接收了你剛剛輸入的字符串是:ni掌柜  長度是4
    用Scanner類的next()方法接收了你剛剛輸入的字符串是:  長度是0

    完蛋了,當 Java Scanner的next和nextLine方法連用時,


    你根本沒有機會輸入第二個字符串了!!!

    問題解析:

       next方法和nextLine方法的表象區別是前者讀取的是“一段”字符,而后者讀取的是一行字符串。

       出現以上現象的原因簡單的說主要是由next()方法的不負責造成的。

       next()方法的工作原理:( 膚淺的說)

       從一行中掃描,直到碰到特定的標識符:空格或是換行符(/n),獲取其前的字符(串)。

        看這里,第一個next()方法讀入了“ni掌柜”,但并沒有讀入"/n",也不負責換行,然后就把 "/n"丟給了nextLine()處理,

        你也知道的,nextLine()屬于那種“見錢眼開”,看見“/n”就收了,然后掃描了 /n 之前的內容,也就是空字符串。于是出現問題了。

        問題解決:

         view plaincopy to clipboardprint?
package cn.nileader.app.vi;   
import java.util.Scanner;   
public class Test {   
    public static void main(String[] args) throws Exception{   
        Scanner cin = new Scanner(System.in);   
        String  ni = cin.next();   
            System.out.println("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());   
        while(  (ni = cin.nextLine()).equals("") ){}   
        System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());   
    }   
}   
package cn.nileader.app.vi;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
        String  ni = cin.next();
System.out.println("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());
    while(  (ni = cin.nextLine()).equals("") ){}
    System.out.print("用Scanner類的next()方法接收了你剛剛輸入的字符串是:"+ni+"  長度是"+ni.length());
}
}  

         運行結果:

        ni掌柜
        用Scanner類的next()方法接收了你剛剛輸入的字符串是:ni掌柜  長度是4
        是個天才
        用Scanner類的next()方法接收了你剛剛輸入的字符串是:是個天才  長度是4

        把原來的第二個cin.nextLine()

        改成 while(  (ni = cin.nextLine()).equals("") ){}

        這樣就可以、除掉上一行的“/n”的影響了。




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开鲁县| 固阳县| 比如县| 九寨沟县| 屯留县| 军事| 余庆县| 墨竹工卡县| 江油市| 静乐县| 苗栗县| 枝江市| 宜丰县| 伊春市| 全南县| 洛宁县| 定安县| 宁南县| 宜昌市| 德格县| 汨罗市| 余干县| 上林县| 梁河县| 武平县| 原阳县| 巩留县| 敦煌市| 邵阳县| 兖州市| 渑池县| 南丰县| 新余市| 武陟县| 河曲县| 永善县| 兴隆县| 余庆县| 庆阳市| 阳泉市| 贺州市|