当前位置: 首页 > 知识库问答 >
问题:

来自java.util.Scanner的扫描器可以读取复制粘贴的文本吗?

殷建弼
2023-03-14
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at chriswb.Encoder.main(Encoder.java:21)

源代码如下:

public class Encoder {
public static void main(String[] args) {
    Scanner read = new Scanner(System.in);
    int option = 0;
    while (option != 1) {
            System.out.println("Write text : ");
            String content = read.nextLine();
            byte[] bytes = content.getBytes(StandardCharsets.UTF_8);
            content = Base64.getEncoder().encodeToString(bytes);
            System.out.println("");
            System.out.println(content);
            System.out.println("");
            System.out.println("0. Again");
            System.out.println("1. Close");
            option = read.nextInt();
            read.nextLine();
    }
}

}

共有1个答案

贺劲
2023-03-14

您在文章中显示的代码不会提供您所说的接收到的异常,但这是因为您现在使用的是扫描器#nextline()方法,而不是扫描器#nextline()方法。

scanner#next()方法返回一个标记(或单词),它使用默认的空白作为分隔符,因此,如果输入的字符串包含多个用空白分隔的单词,那么只返回第一个单词。此外,在控制台中提供文本后按Enter时添加到扫描器缓冲区的换行符不会被消耗,因此它自然会落到扫描器#NextInt()方法中,该方法当然会生成InputMismatchException,原因很简单,换行符不是整数。所有Scanner#nextxxx方法都有这个问题,除了Scanner#nextline()方法...它确实使用换行符。

如果您只想要用户输入的第一个单词,那么无论如何,您可以继续使用扫描器#next()方法,但是您还需要处理(使用)由Enter键点击提供的换行符。您已经在使用扫描器#NextInt()方法的地方完成了这项工作,现在也为扫描器#Next()方法完成这项工作,例如:

Scanner read = new Scanner(System.in);
int option = 0;
while (option != 1) {
        System.out.println("Write text : ");
        String content = read.next();
        read.nextLine();
        byte[] bytes = content.getBytes(java.nio.charset.StandardCharsets.UTF_8);
        content = java.util.Base64.getEncoder().encodeToString(bytes);
        System.out.println("");
        System.out.println(content);
        System.out.println("");
        System.out.println("0. Again");
        System.out.println("1. Close");
        option = read.nextInt();
        read.nextLine();
}
Scanner read = new Scanner(System.in);
System.out.println("Enter a String with a few words separated by whitespaces: ");
String content = read.nextLine();
String[] words = content.split("\\s+"); // split on one (or more) whitespaces.
content = words[0]; // The first word
System.out.println("First Word: " + content);
 类似资料:
  • 本文向大家介绍python通用读取vcf文件的类(复制粘贴即可用),包括了python通用读取vcf文件的类(复制粘贴即可用)的使用技巧和注意事项,需要的朋友参考一下 前言 处理vcf文件的时候,需要多种切割,正则匹配,如果要自己写其实会比较麻烦,并且每次还得根据vcf文件格式或者需要读取的值不同要修改相应的代码。因此很多人会选择一些python的vcf的库,但是首先你得安装这个库, 并且有一些库

  • 我有一个问题与TinyMCE编辑器,我无法解决。 如果从Excel复制一个表并将其粘贴到编辑器中,则格式将丢失。我已经设置了extended_valid_elements如下... 我怎样才能使这个工作从excel而不必首先通过word?

  • 我很确定我以前做过这个,但是我找不到任何关于它的留档。我发现这个问题很难研究。 我想在屏幕上显示一段文本的一个版本(A)。但是,当文本被复制时,该文本(B)的不同版本实际上被复制到剪贴板。在实践中,A和B可能非常相似,但该技术应该允许A和B是完全不同的字符串。 例如,如果我使用

  • 问题内容: 我的.emacs中有(cua-mode t),因此Cc是复制的,而Cv是粘贴的,就像桌面上的其他大多数程序(Ubuntu,Gnome,Linux)一样。但是,Emacs似乎并未与其他程序共享剪贴板/复制缓冲区。 例如,如果我在Firefox中使用Cc,则可以将SCv粘贴到终端中,或者将Cv粘贴到gedit中。但是,如果我在emacs中使用Cv(或Cy),则无法获得从Firefox复制的

  • 问题内容: 任何人都可以解释我的类之间的区别,以及?我想阅读文本文件时使用哪一个? 问题答案: 好: 只是使用平台默认编码(urgh)读取文件的 是另一个的包装,增加了缓冲并可以一次读取一行 从各种不同的来源读取内容,但通常用于交互式输入。我个人觉得API的痛苦和晦涩。 要读取一个文本文件,我建议使用一个包裹在一个(这样你就可以指定编码),然后包裹在缓冲和在同一时间读取线的能力。 或者,您可以使用