标签: java.util.scanner

如何使用扫描仪和模式类匹配文本中的模式?

我想查找我的文本文件中是否存在特定模式.

即时通讯使用以下类:

java.util.regex.Pattern and java.util.Scanner;
Run Code Online (Sandbox Code Playgroud)

我的示例文本行是

String Line="DBREF  1A1F A  102   190  UNP    P08046   EGR1_MOUSE     308    396";
Run Code Online (Sandbox Code Playgroud)

而且,我想匹配以下类型的模式:

A    102   190
Run Code Online (Sandbox Code Playgroud)

其中,在A的位置az或AZ但是单个包机.

在102的位置任何整数和任何长度.

在190的位置任何整数和任何长度.

而且,我的模式匹配代码是:

     Scanner sr=new Scanner(Line);
     Pattern p = Pattern.compile("\\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+");
     while(sr.hasNext(p))
     {
         System.out.println("Pattern exists");
         System.out.println("Matched String : "+sr.next(p));
     }
Run Code Online (Sandbox Code Playgroud)

但是,即使它存在,模式也不匹配..

我认为问题在于我的模式字符串:

\\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+"
Run Code Online (Sandbox Code Playgroud)

任何人,Plz帮助我应该使用什么模式字符串????

java regex pattern-matching java.util.scanner

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

使用扫描仪获取用户输入

我想让扫描仪在循环中接收输入.一旦用户想要完成,他就可以退出这个循环.我尝试了很多不同的方法,但总有一些问题.这是代码:

private void inputEntries() {
    Scanner sc = new Scanner(System.in);
    System.out.println("Continue?[Y/N]");
    while (sc.hasNext() && (sc.nextLine().equalsIgnoreCase("y"))) {//change here
        System.out.println("Enter first name");
        String name = sc.nextLine();
        System.out.println("Enter surname");
        String surname = sc.nextLine();
        System.out.println("Enter number");
        int number = sc.nextInt();
        Student student = new Student(name, surname, number);
        students.add(student);
        try {
            addToFile(student);
        } catch (Exception ex) {
            Logger.getLogger(TextReader.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("Continue?[Y/N]");
    }
}
Run Code Online (Sandbox Code Playgroud)

上面代码的问题,也发生在我尝试的不同方法上,当用户输入Y时,Scanner将跳过第一个名字输入,并跳转到姓氏.如果用户键入N,则循环正确停止.有人可以解释这种情况发生的原因,以及如何克服使用Scanner类?

ps:执行类似的操作while(sc.nextLine().equals("Y"))会导致循环在首次运行循环后从用户输入之前终止.

java java.util.scanner

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

在文件中搜索String,如果找到则返回该String

如何在txt文件中搜索用户输入的String,然后将该String返回到控制台.我写了一些下面不起作用的代码,但我希望它可以说明我的观点......

public static void main(String[] args) {
  searchforName();
}

   private static void searchForName() throws FileNotFoundException {
    File file = new File("leaders.txt");
    Scanner kb = new Scanner(System.in);
    Scanner input = new Scanner(file);

    System.out.println("Please enter the name you would like to search for: ");
    String name = kb.nextLine();


    while(input.hasNextLine()) {
        System.out.println(input.next(name));
    }
}
Run Code Online (Sandbox Code Playgroud)

"leaders.txt"文件包含名称列表.

java io java.util.scanner

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

扫描仪读取大文件

我正在玩Scanner类用于学习目的,我使用它来读取一个非常大的文件(60.000行aprox)而不使用Reader类,它在大约400行后停止读取.我是否必须在Scanner的构造函数中使用Bufferedreader,否则问题还是别的?我想知道为什么会这样.谢谢.我的代码是输出所有行的常用代码.

File file1 = new File("file1");
Scanner in= new Scanner(file1);
while  (scan.hasNextLine()  ) {
String str = scan.nextLine();
System.out.println(str);
}
Run Code Online (Sandbox Code Playgroud)

java java.util.scanner

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

将.txt文件读入2D数组

这里有一些主题,但这个问题略有不同,使其与众不同.

我只专注于一个更大问题的一半.我相信很多人都知道这个神奇的方块问题.

提示:
假设每行上都有行和数字的文件,如显示的方框.编写一个程序,将信息读入intS的二维数组.程序应该确定矩阵是否是魔方.

工作方案:

public static int[][] create2DIntMatrixFromFile(String filename) throws Exception {
int[][] matrix = {{1}, {2}};

File inFile = new File(filename);
Scanner in = new Scanner(inFile);

int intLength = 0;
String[] length = in.nextLine().trim().split("\\s+");
  for (int i = 0; i < length.length; i++) {
    intLength++;
  }

in.close();

matrix = new int[intLength][intLength];
in = new Scanner(inFile);

int lineCount = 0;
while (in.hasNextLine()) {
  String[] currentLine = in.nextLine().trim().split("\\s+"); 
     for (int i = 0; i < currentLine.length; i++) {
        matrix[lineCount][i] = …
Run Code Online (Sandbox Code Playgroud)

java arrays java.util.scanner

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

BufferedReader提供非零退出代码

问题 一个简单的编程问题,涉及从控制台读取N,T次数并对其执行简单计算.

约束:

1≤T≤1000

2≤N≤100000000

由于BufferedReader通常比Scanner快,我使用它但程序退出非零退出代码,而使用Scanner解决了问题.

由于两者在我的计算机上都能正常工作,我怀疑这是一个内存问题.

问题:

  1. 我的假设是BufferedReader比Scanner更快吗?
  2. BufferedReader会使用更多内存吗?如果是,是错误的原因吗?

码:

使用BufferedReader,抛出错误

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        for (int i=0; i<T; i++) {
            int N = Integer.parseInt(br.readLine());
            int res = (N/2)+1;
            System.out.println(res);
        }
        br.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用Scanner返回正确输出的代码:

import java.io.IOException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException{
        Scanner sc = new …
Run Code Online (Sandbox Code Playgroud)

java bufferedreader java.util.scanner

7
推荐指数
1
解决办法
1584
查看次数

扫描仪不会扫描负数

我正在尝试使用Java中的Scanner类扫描负数.

我有这个输入文件:

1

-1,2,3

我的代码如下:

    Scanner input = new Scanner(new File("data/input.txt"));
    int i = input.nextInt();
    input.useDelimiter(",|\\s*"); //for future use
    int a = input.nextInt();
    System.out.println(i);
    System.out.println(a);
Run Code Online (Sandbox Code Playgroud)

我的预期输出应该是

1

-1

相反,我得到一个错误(类型不匹配).

当我做

String a = input.next();
Run Code Online (Sandbox Code Playgroud)

代替

int a = input.nextInt();
Run Code Online (Sandbox Code Playgroud)

我不再得到错误而是得到了

1

-

java java.util.scanner

7
推荐指数
1
解决办法
3854
查看次数

如何在Java中检查用户输入是String,double还是long

我是java的初学者.我想首先检查用户输入是String还是Double或int.如果是String,double或减号,则应提示用户再次输入有效的int号.只有当用户输入有效数字时,程序才会跳转尝试.我一直在想几个小时,我没有任何用处.请帮助,谢谢!

import java.util.InputMismatchException;
import java.util.Scanner;

public class Fizz {

public static void main(String[] args) {

    System.out.println("Please enter a number");

    Scanner scan = new Scanner(System.in);

    try {

        Integer i = scan.nextInt();

        if (i % 3 == 0 && (i % 5 == 0)) {
            System.out.println("FizzBuzz");
        } else if (i % 3 == 0) {
            System.out.println("Fizz");
        } else if (i % 5 == 0) {
            System.out.println("Buzz");
        } else {
            System.out.println(i + "?3?5???????????");
        }
    } catch (InputMismatchException e) {
        System.out.println("");

    } finally { …
Run Code Online (Sandbox Code Playgroud)

java validation java.util.scanner

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

MultiThread运行速度比单个进程慢

对于在学校的作业我被要求创建一个简单的程序,创建1000个文本文件,每个文件具有随机数量的行,通过多线程\单个进程计算有多少行.而不是删除那些文件.

现在测试过程中发生了一件奇怪的事情 - 所有文件的线性计数总是比以多线程方式计算它们要快一点,这已经激发了我课堂圈内的学术理论化课程.

Scanner用于读取所有文件时,一切都按预期工作 - 在500毫秒线性时间和400毫秒线程时间读取1000个文件

然而,当我使用BufferedReader时间下降到大约110ms线性和130ms线程.

哪部分代码会导致这个瓶颈?为什么?

编辑:只是为了澄清,我不是问为什么Scanner工作慢于BufferedReader.

完整的可编译代码:(虽然你应该改变文件创建路径输出)

import java.io.*;
import java.util.Random;
import java.util.Scanner;

/**
 * Builds text files with random amount of lines and counts them with 
 * one process or multi-threading.
 * @author Hazir
 */// CLASS MATALA_4A START:
public class Matala_4A {

    /* Finals: */
    private static final String MSG = "Hello World";

    /* Privates: */
    private static int count;
    private static Random rand;

    /* Private Methods: …
Run Code Online (Sandbox Code Playgroud)

java multithreading bufferedreader java.util.scanner

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

在if语句WITHOUT变量中验证扫描仪用户输入

目的是减少变量的数量,而不是做许多变量,我想做这样的事情:

Scanner scnr = new Scanner(System.in); 

int number = 0;

scnr.nextInt();  

if (((scnr.nextInt() >= 4) && (scnr.nextInt() <=10))) 
{
   number = scnr.nextInt();
}
Run Code Online (Sandbox Code Playgroud)

代替

Scanner scnr = new Scanner(System.in); 

int number = 0;
int validNum = 0;

number = scnr.nextInt();  

if (((number >= 4) && (number <=10))) 
{
   validNum = number;
}
Run Code Online (Sandbox Code Playgroud)

java if-statement java.util.scanner

7
推荐指数
1
解决办法
189
查看次数