在Java中用键盘返回的Scanner方法是什么?char
喜欢nextLine()的String,nextInt()对int等
Scanner scan = new Scanner(System.in);
double numbers = scan.nextDouble();
double[] avg =..????
Run Code Online (Sandbox Code Playgroud) 如何使用类的useDelimiter()方法Scanner同时使用逗号(,)和换行符(\n)作为分隔符?
我正在解析csv文件中的一些文本.
在我当前的程序中,一种方法要求用户输入产品的描述作为String输入.但是,当我后来尝试打印出这些信息时,只String显示了节目的第一个字.可能是什么原因造成的?我的方法如下:
void setDescription(Product aProduct) {
Scanner input = new Scanner(System.in);
System.out.print("Describe the product: ");
String productDescription = input.next();
aProduct.description = productDescription;
}
Run Code Online (Sandbox Code Playgroud)
因此,如果用户输入的是"带有橙味的苏打汽水",System.out.print则只会产生"闪闪发光".
任何帮助将不胜感激!
免责声明:我已经查看了我能找到的所有问题,但没有一个能回答这个问题.如果你找到一个,请指出我并礼貌.
因此,Oracle I/O教程使用Scanner打开一个文本文件,如下所示:
new Scanner(BufferedReader(FileReader("xanadu.txt")));
Run Code Online (Sandbox Code Playgroud)
但是Javadoc用Scanner打开一个文本文件,如下所示:
new Scanner(new File("myNumbers"));
Run Code Online (Sandbox Code Playgroud)
使用更简单的方法会很好,特别是当我有一个小文件并且可以使用较小的缓冲区时,但我也看到有人说当你直接打开文件时你无法关闭它.如果是这样的话,为什么在官方文档中使用这个成语?
编辑:我也看过,new Scanner(FileReader("blah.txt"));但这似乎是两个世界中最糟糕的.
编辑:我不打算开始讨论是否使用扫描仪.我有一个关于如何使用扫描仪的问题.谢谢.
我对Scanner有一种奇怪的行为.它将使用我在使用Scanner(FileInputStream)构造函数时使用的一组特定文件,但它不会与Scanner(File)构造函数一起使用.
Scanner(File)Scanner s = new Scanner(new File("file"));
while(s.hasNextLine()) {
System.out.println(s.nextLine());
}
Run Code Online (Sandbox Code Playgroud)
结果:没有输出
Scanner(FileInputStream)Scanner s = new Scanner(new FileInputStream(new File("file")));
while(s.hasNextLine()) {
System.out.println(s.nextLine());
}
Run Code Online (Sandbox Code Playgroud)
结果:文件内容输出到控制台.
输入文件是包含单个类的java文件.
我以编程方式(在Java中)仔细检查:
Scanner(File)在这种情况下通常适合我,我不知道为什么现在没有.
我一直试图理解Scanner的工作方式,一直绞尽脑汁.所以这是代码:
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String p = sc.nextLine();
System.out.println(s);
System.out.println(p);
System.out.println(sc.hasNextLine());
Run Code Online (Sandbox Code Playgroud)
我期待的是:
Love is good <- press ENTER
Love is blind <- press ENTER
Love is good <- output
Love is blind <- output
false
Run Code Online (Sandbox Code Playgroud)
我有什么:
Love is good <- I press ENTER
Love is blind <- I press ENTER
Love is good <- output
Love is blind <- output
<- press ENTER
true <- output
Run Code Online (Sandbox Code Playgroud)
我不明白的是:
这是一些示例代码:
import java.util.Scanner;
class In
{
public static void main (String[]arg)
{
Scanner in = new Scanner (System.in) ;
System.out.println ("how many are invading?") ;
int a = in.nextInt() ;
System.out.println (a) ;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我运行该程序并给它一个int喜欢4,那么一切都很顺利.
另一方面,如果我回答too many它并不嘲笑我有趣的笑话.相反,我得到了这个(如预期的那样):
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:819)
at java.util.Scanner.next(Scanner.java:1431)
at java.util.Scanner.nextInt(Scanner.java:2040)
at java.util.Scanner.nextInt(Scanner.java:2000)
at In.main(In.java:9)
Run Code Online (Sandbox Code Playgroud)
有没有办法让它忽略不是整数的条目或重新提示"有多少是入侵?" 我想知道如何做到这两点.
在Eclipse中运行以下操作最初导致Scanner无法识别控制台中的回车,从而有效阻止了进一步的输入:
price = sc.nextFloat();
Run Code Online (Sandbox Code Playgroud)
在代码之前添加此行会导致Scanner接受0,23(法语表示法)作为浮点数:
Locale.setDefault(Locale.US);
Run Code Online (Sandbox Code Playgroud)
这很可能是由于Windows XP Pro(法语/比利时语)中的区域设置.当代码再次运行时,仍然接受0,23并输入0.23会导致它抛出一个java.util.InputMismatchException.
有关为什么会发生这种情况的任何解释?还有一个解决方法或我应该使用Float#parseFloat?
编辑:这演示了Scanner如何使用不同的语言环境(在开头取消注释其中一行).
import java.util.Locale;
import java.util.Scanner;
public class NexFloatTest {
public static void main(String[] args) {
//Locale.setDefault(Locale.US);
//Locale.setDefault(Locale.FRANCE);
// Gives fr_BE on this system
System.out.println(Locale.getDefault());
float price;
String uSDecimal = "0.23";
String frenchDecimal = "0,23";
Scanner sc = new Scanner(uSDecimal);
try{
price = sc.nextFloat();
System.out.println(price);
} catch (java.util.InputMismatchException e){
e.printStackTrace();
}
try{
sc = new Scanner(frenchDecimal);
price = sc.nextFloat();
System.out.println(price);
} catch (java.util.InputMismatchException e){
e.printStackTrace();
}
System.out.println("Switching …Run Code Online (Sandbox Code Playgroud) 对不起,如果听起来太简单了.我是Java的新手.
这是我用来检查的一些简单代码hasNextLine().当我运行它时,我无法阻止它.我想如果你没有写任何输入并按下Enter,你就会逃脱while循环.
有人可以向我解释hasNextLine()在这种情况下如何运作?
import java.util.*;
public class StringRaw {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String str = sc.nextLine();
}
System.out.print("YOU'VE GOT THROUGH");
}
}
Run Code Online (Sandbox Code Playgroud)