gpt4 book ai didi

java - 用于验证文件的正则表达式或函数?

转载 作者:行者123 更新时间:2023-11-30 06:40:44 24 4
gpt4 key购买 nike

我手头的任务是验证包含以下数据的文本文件的架构

以下格式的 50 个条目,

序列号是1-50后面跟着一个制表符后面是一个随机数n,范围是100<=n<=500

e.g. 1 <tab> 256

因为正则表达式更容易检查文件的模式并且更易于维护,所以我更喜欢使用正则表达式而不是一个将解析每个字符串并立即验证的类

输出文件应该是这样的

Line 1 formatted correctly
Invalid format on line 2 (51 1000) + (Error message that can be set using a custom exception class)

我的问题是,正则表达式能否强大到足以给我所需的输出,即引发异常以正确的方式设置?

下面是我的尝试

public class TestOutput {

private final int MAX_LINES_TO_READ = 50;

private final String REGEX = "RAWREGEX";

public void testFile(String fileName) {

int lineCounter = 1;

try {

BufferedReader br = new BufferedReader(new FileReader(fileName));

String line = br.readLine();

while ((line != null) && (lineCounter <= MAX_LINES_TO_READ)) {

// Validate the line is formatted correctly based on regular expressions
if (line.matches(REGEX)) {
System.out.println("Line " + lineCounter + " formatted correctly");
}
else {
System.out.println("Invalid format on line " + lineCounter + " (" + line + ")");
}

line = br.readLine();
lineCounter++;
}

br.close();

} catch (Exception ex) {
System.out.println("Exception occurred: " + ex.toString());
}
}

public static void main(String args[]) {

TestOutput vtf = new TestOutput();

vtf.testFile("transactions.txt");
}
}

这是我的问题

  1. 最佳设计应该是什么样子(是否使用正则表达式)?
  2. 如果是,使用什么正则表达式?

最佳答案

使用这个正则表达式:

String REGEX = "([1-9]|[1-4]\\d|50)\t([1-4]\\d\\d|500)";

参见 live demo .

解释...

[1-9]|[1-4]\\d|50 表示“任何数字 1-50”,通过 1-9、10-49 和 50 的三个交替实现。

同样,[1-4]\\d\\d|500 表示“100-500”,通过 100-499 和 500 的两次交替实现。

只有 50 行,“性能”是无关紧要的(除非你每秒执行 100 次)——选择最易读和理解的方法。如果您可以使用正则表达式,它通常会产生更少的代码,并且性能足够好。


测试代码:

private final String REGEX = "([1-9]|[1-4]\\d|50)\\t([1-4]\\d\\d|500)";

public void testFile(String fileName) {
int lineCounter = 1;
try {
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line = br.readLine();
while ((line != null) && (lineCounter <= MAX_LINES_TO_READ)) {
if (line.matches(REGEX)) {
System.out.println("Line " + lineCounter + " formatted correctly");
} else {
System.out.println("Invalid format on line " + lineCounter + " (" + line + ")");
}
line = br.readLine();
lineCounter++;
}
br.close();
} catch (Exception ex) {
System.out.println("Exception occurred: " + ex.toString());
}
}

测试文件:

1   123
50 346
23 145
68 455
1 535

输出:

Line 1 formatted correctly
Line 2 formatted correctly
Line 3 formatted correctly
Invalid format on line 4 (68 455)
Invalid format on line 5 (1 535)

关于java - 用于验证文件的正则表达式或函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57256016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com