标签: java.util.scanner

使用星号字符作为Java扫描仪分隔符

嘿大家,这个问题对我来说似乎很傻,但我不能为我的生活找到答案.我想要做的就是扫描一个用星号(*)分隔的字符串.但是,当我尝试foo.useDelimiter("*");时,Java将星号解释为通配符,并使用每个字符作为分隔符...这显然不是我想要的.我尝试使用反斜杠作为转义字符,但这给了我编译器错误"非法转义字符".

这可能很简单,但我又一次不知道在哪里找到答案!

非常感谢!

莱纳斯

java delimiter java.util.scanner

2
推荐指数
1
解决办法
3066
查看次数

java.util.Scanner不会返回到提示

import java.util.Scanner;

class newClass {
    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        while (s.hasNext()) {
            System.out.println(s.next());
        }
        s.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

该程序不会返回提示(我已通过终端运行它).这是为什么?我该如何纠正?

java java.util.scanner

2
推荐指数
1
解决办法
1528
查看次数

在java中从用户获取整数数组输入

我需要从用户那里获得一系列整数.系统不会提示用户输入数字.输入将具有以下形式:

6

34 12 7 4 22 15

3

3 6 2

第一行表示第二行中的整数数.我首先尝试将第二行作为String读取,然后使用StringTokenizer将其分解为代码中的整数.正常情况发生在我的程序中很多,这很耗时,我需要直接阅读它们.我记得在C++中它过去相当简单.以下代码段用于执行此操作.

for(i=0;i<6;i++)
cin>>a[i];
Run Code Online (Sandbox Code Playgroud)

为此,我使用了java.util.Scanner,我的代码如下所示:

InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
Scanner src = new Scanner(System.in);

for(x=0;x<2;x++){
    arraySize = Integer.parseInt(br.readLine());

    for(i=0;i<arraySize;i++)
        array[i] = src.nextInt();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我收到以下错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "34 12 7 4 22 15"
Run Code Online (Sandbox Code Playgroud)

我愿意接受建议,而不是仅仅依靠Scanner.如果有任何其他方法来实现这一点,我就是游戏.

java string java.util.scanner

2
推荐指数
2
解决办法
7万
查看次数

使用scanner来读取输入语句

我正在编写代码来阅读简单的单词语句,如"一二三",并将每个单词放入一个数组String []标记,我想使用Scanner输入语句,但它只读取第一个单词.当我使用main方法输入语句时效果很好.我能知道我的错误是什么吗?

这是2个代码:

//使用main方法:

public class MyLangyage {
    public static void main(String[] args) {
        String statement = "one two three";
        screen(statement);
    }
    public static void screen(String statement) {
        String token[]= statement.split(" ");

        for (int i = 0; i < token.length; i++) {
            System.out.println(token[i]);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

控制台的结果将是:

一二三

//使用扫描仪:

import java.util.Scanner;

public class MyLangyage {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String statement = scanner.next();
        screen(statement);
    }
    public static void screen(String statement) {
        String token[]= …
Run Code Online (Sandbox Code Playgroud)

java java.util.scanner

2
推荐指数
1
解决办法
3万
查看次数

带有正则表达式分隔符的Java Scanner

为什么以下代码返回false?

Scanner sc = new Scanner("-v ");
sc.useDelimiter("-[a-zA-Z]\\s+");
System.out.println(sc.hasNext());
Run Code Online (Sandbox Code Playgroud)

奇怪的是它-[a-zA-Z]//s+会回归真实.

我也无法理解为什么这会返回true:

Scanner sc = new Scanner(" -v");
sc.useDelimiter("-[a-zA-Z]\\s+");
System.out.println(sc.hasNext());
Run Code Online (Sandbox Code Playgroud)

java java.util.scanner

2
推荐指数
1
解决办法
1万
查看次数

Java Scanner hasNext()不返回false

我试图从用户连续读取输入,直到用户键入退出.我只是输入'quit'来测试它,但是console.hasNext()似乎没有返回false.事实上,似乎该程序在第7行(hasNext()行)被阻止.有任何想法吗?

    boolean bool = true;
    while (bool) {
        System.out.println("Type 'quit':");
        Scanner console = new Scanner(System.in);
        if (console.next().equals("quit")) {
            System.out.println("You typed quit");
            System.out.println("check: " + console.hasNext()); // This line doesnt print
            bool = false;
        }
    }
Run Code Online (Sandbox Code Playgroud)

java java.util.scanner

2
推荐指数
1
解决办法
4167
查看次数

Scanner.nextFloat的奇怪行为

如果我执行以下代码:

import java.util.Scanner;

public class ScannerTest {

    public static void main(String[] args) {

        Scanner s = null;
        StringBuilder builder = new StringBuilder(64);
        String line = "1.1 2.2 3.3";
        float fsum = 0.0f;      

        s = new Scanner(line).useDelimiter(" ");

        while (s.hasNextFloat()){
            float f = s.nextFloat();
            fsum += f;
            builder.append(f).append(" ");
        }
        System.out.println("Floats found: " + builder);
        System.out.println("Sum: " + fsum);
        s.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的输出是:

Floats found: 
Sum: 0.0
Run Code Online (Sandbox Code Playgroud)

但是,如果我用点替换逗号"1,1 2,2 3,3",那么它确实识别浮点数:

Floats found: 1.1 2.2 3.3 
Sum: 6.6000004
Run Code Online (Sandbox Code Playgroud)

我想这是因为我的SO是西班牙语,我们使用逗号而不是带小数的点.我想过使用Locale,但是没有Locale.SPANISH.

此外,当我运行它时,它的行为正好相反: …

java localization java.util.scanner

2
推荐指数
1
解决办法
1436
查看次数

Java - Scanner - 跳过我上一个nextLine()请求

所以我Scanner scan早先实例化了很多,但它在我的第二个scan.nextLine()之后跳过了scan.nextInt().我不明白为什么会跳过它?

     System.out.println("Something: ");

        String name = scan.nextLine();

        System.out.println("Something?: ");

        int number = scan.nextInt();

        System.out.println("Something?: ");

        String insurer = scan.nextLine();

        System.out.println("Something?: ");

        String another = scan.nextLine();
Run Code Online (Sandbox Code Playgroud)

java java.util.scanner

2
推荐指数
3
解决办法
5842
查看次数

为什么Scanner使用Scanner#ioException()而不是抛出异常?

这有什么好处/垮台吗?

通常,从流中读取时会抛出异常:

try {
    inputStream.read();
}catch(IOException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

但是当使用a时Scanner,你不会被迫处理异常.相反,如果抛出一个,你会使用Scanner#ioException().

我知道Scanner不是一个流,而不是一个解析数据的tokenizer,如果需要,但为什么它处理它的异常不像其他涉及IO的行为?我什么时候应该以这种方式处理异常?

java ioexception java.util.scanner

2
推荐指数
1
解决办法
2425
查看次数

通过扫描仪读取时,首先读取最后一个输入

Scanner in=new Scanner(System.in);
while(true){
    int X = in.nextInt();
    System.out.println(X);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码只能按我输入的顺序读取数字.例如:1 2 3 4这些数字将被读作1 2 3 4

我希望它们以相反的顺序读取.我找不到任何方法.

java java.util.scanner

2
推荐指数
1
解决办法
202
查看次数