我想查找我的文本文件中是否存在特定模式.
即时通讯使用以下类:
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帮助我应该使用什么模式字符串????
我想让扫描仪在循环中接收输入.一旦用户想要完成,他就可以退出这个循环.我尝试了很多不同的方法,但总有一些问题.这是代码:
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"))会导致循环在首次运行循环后从用户输入之前终止.
如何在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"文件包含名称列表.
我正在玩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) 这里有一些主题,但这个问题略有不同,使其与众不同.
我只专注于一个更大问题的一半.我相信很多人都知道这个神奇的方块问题.
提示:
假设每行上都有行和数字的文件,如显示的方框.编写一个程序,将信息读入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) 问题 一个简单的编程问题,涉及从控制台读取N,T次数并对其执行简单计算.
约束:
1≤T≤1000
2≤N≤100000000
由于BufferedReader通常比Scanner快,我使用它但程序退出非零退出代码,而使用Scanner解决了问题.
由于两者在我的计算机上都能正常工作,我怀疑这是一个内存问题.
问题:
码:
使用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中的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的初学者.我想首先检查用户输入是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) 对于在学校的作业我被要求创建一个简单的程序,创建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) 目的是减少变量的数量,而不是做许多变量,我想做这样的事情:
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)