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

读取整数或字符串时停止扫描程序

山乐生
2023-03-14
public class Main {
    public static void main (String[] args){
        String[] StringList; 
        Integer[] IntegerList;
        ArrayList<String> auxS = new ArrayList<>();
        ArrayList<Integer> auxI = new ArrayList<>();
        String order; int ord=-1;
        Scanner scan = new Scanner(System.in);
        order = scan.nextLine();
        //do something with order

        while(scan.hasNextLine()){
            if(scan.hasNextInt()){
                auxI.add(scan.nextInt());
            }
            else if(!scan.nextLine().isEmpty()){
                auxS.add(scan.nextLine());
            }else{ //I've tried using another scan. methods to get to this point
                scan.next();
                break;
            }
        }
    }
}

正如您所看到的,我首先读取一个字符串并按“order”存储它,然后我想继续读取,直到EOF或user输入“enter”或任何其他非特定的东西,如“write'exit'”或类似的东西。我尝试使用Scan.HasNext、hasNextLine和其他涉及最后一个else的组合,但都不起作用。
如果输入是:

>>THIS WILL BE STORED IN ORDER<<
123
321
213
231
312
<enter>

我想要它停止时,没有输入,如在最后一行。将整数或字符串存储在它们自己的数组列表中是很重要的,因为我稍后会使用它,并且我需要标识每个输入数据的类型(这就是为什么我在while循环中使用hasNextInt的原因)。

共有1个答案

瞿博学
2023-03-14

通常,只要不要使用.nextline(),它会让人困惑,而且很少能做到您想要的。如果要将整行作为单个项目读取,请更新扫描器的分隔符;将其从默认的“任意空格序列”更改为“单个换行符”:scanner.usedelimiter(“\r?\n”);将执行该操作(在创建扫描器后立即运行该操作)。若要读取一行,请使用任何.Next()方法(但不是.NextLine()):是否需要int?调用.nextInt()。要绳子吗?调用.next()等。

然后拆分if/elseif块。空行仍然是字符串,只是,一个空行:

if (scanner.hasNextInt()) {
    // deal with ints
} else {
   String text = scanner.next();
   if (!text.isEmpty()) {
       // deal with strings
   } else {
       // deal with a blank line
   }
}

注意:一旦您停止使用.nextline(),您就不必抛出半随机的.nextline()调用来“清除缓冲区”或其他操作。这种烦恼就会消失,这也是为什么你应该忘记Nextline的原因之一。通常,对于扫描仪,要么只使用.nextline(),要么永远不要使用.nextline(),这样效果会好得多。

 类似资料:
  • 我使用扫描仪阅读大约700行文本(每行一个字),并存储每行/字作为一个元素的String ArrayList构建与预定的800元素大小。然而,当在Eclipse的变量模式中调试时,我注意到ArrayList的后期元素根本没有初始化——似乎扫描仪停在一个单词的中间,在一个随机的行上。 分隔符(我已经初始化了扫描器,有“\n”分隔符和没有“\n”分隔符,没有区别)或文本内容本身都没有问题——当我切换单

  • 问题内容: 我正在尝试编写此方法,该方法会不断从用户那里读取内容,直到输入单词“ exit”为止。我尝试了一个for和break循环;它没有用。我尝试了一段时间,但即使输入了“退出”一词也不会停止。任何想法如何解决这一问题?谢谢。 问题答案: 是错的。 你要 要么 分别取决于exit是变量还是字符串文字。在Java中,表示引用相等(例如,这两个引用指向内存中的相同地址),而。表示对象等效项,通常在

  • 我正在尝试从系统中读取。输入是这样的:第一个数字是测试用例的数量,然后是整数,然后是一些行。 问题是,尽管循环中存在条件,但当我完成最后一个测试时,while循环不会退出。

  • 问题内容: 扫描程序无法阅读整个句子。或者说我正在编写一种方法,该方法可以反转句子中的单词,同时保持句子中的单词顺序。 我的扫描仪: 但是当我写一个句子时,它会将第一个单词反转并停止。 问题答案: 您需要使用nextline()函数代替next()来捕获整行Change 代替

  • 我创建了一个简单的扫描器,用于计算中的字符串数。txt文件。每个字符串位于下一行。它算错了,每次它给我数字297,甚至有超过20000个字符串。这个txt文件是由我编写的另一个程序创建的,它从网站获取链接,并使用FileWriter和BufferedWriter将其保存到。txt文件。可能有什么问题? 编辑:字符串示例:

  • 我试图扫描一个整数,并运行一个循环来扫描字符串,直到那个整数。但这段代码跳过了第一个字符串... 有解决办法吗?