所以,从我开始尝试解释我想要完成的事情。我是java的新手,我愿意学习它。问题:
我们假设我的txt文件中填充了类似的内容:
模式是:| a b |,当a是ID而b是实际数字时。我已经读过java中的Scanner,FileReader和BufferedReader类,我试图用它们从文件中恢复整数并将它们保存到我的二维整数数组([2] [1000])。 [0] [0-999]将是ID&1 [0-999]将是实际数字。现在是我坚持的那一刻 - 我可以先读两个零,但后来我不知道如何跳过|符号。
我现在的代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ShortSearching {
public static void main(String[] args) {
int[] tall = new int[100];
int i = 0, k = 0;
Tab tablica = new Tab();
File textFile = new File("byteObs.txt");
try (Scanner scanner = new Scanner(textFile)) {
while (scanner.hasNextInt()) {
k++;
tall[i++] = scanner.nextInt();
System.out.println(tall[i]);
if (k == 2) {
scanner.findInLine("|");
scanner.skip("|");
k = 0;
}
}
} catch (FileNotFoundException e) {
System.out.println("File not found: " + textFile.toString());
//e.printStackTrace();
}
/*String byteObs = "byteObs.txt";
File textFile = new File(byteObs);
Scanner input = new Scanner(textFile);
//short[] tabID,tabVal = new short[1000];
byte k = 0;
while (input.hasNextLine()) {
for (int i = 0; i <= 999; i++) {
for (int j = 0; j <= 999; j++) {
if (k != 2) {
if (input.hasNextShort()) {
//matrix[i][j] = input.nextShort();
//System.out.printf("%d ", matrix[i][j]);
k++;
}
}
else {
input.skip("|");
k=0;
}
}
}
}
input.close(); */
}}
我尝试了多种方法,无法粘贴其中一些,因为它们已被删除。如果有人至少指出我应该阅读的关于能够跳过这个|的方法,我将不胜感激我文本文件中的符号。
PS。我知道for循环数字是错误的,当我修复跳过符号的东西时,我会改变它们。
EDIT http://wklej.org/id/1543739/
全文。
答案 0 :(得分:2)
扫描程序的许多方法都希望模式代表正则表达式(正则表达式)。在skip
方法的情况下也会发生这种情况,但在正则表达式中|
是表示OR
运算符的元字符。要使它变得简单,你需要在它之前添加\
来逃避它(请记住,要在String中创建\
文字,你还需要用另一个\
来转义它。
因此代表|
字符的正则表达式为\|
,需要将其写为字符串"\\|"
。
其他问题是skip
需要正则表达式,需要匹配需要跳过的整个部分,这部分必须完全出现在扫描仪光标的位置之后,所以在数据类似
1 |
我们将调用nextInt()
光标将在1
之后设置(我将用I
标记)
1I |
我们要跳过的模式是space
+ |
。
最后一个问题是你的文件在所有行中没有正确的值(它的行只包含
| |
我们将无法使用nextInt()
,因为下一个元素不会是int。在这种情况下,我们可以通过使用hasNextInt()
简单地测试此行是否以整数开头,如果它不读取则不通过调用nextLine()
来处理其内容。
所以你的代码看起来像
File textFile = new File("input.txt");
try (Scanner sc = new Scanner(textFile)) {
while (sc.hasNextLine()) {
if (sc.hasNextInt()) {
System.out.println("id = " + sc.nextInt());
System.out.println("value = " + sc.nextInt());
if (sc.hasNext("\\|"))
sc.skip(" \\|");
} else {
sc.nextLine(); // skip line if it doens't contain more integers
}
}
} catch (FileNotFoundException e) {
System.out.println("File not found: " + textFile);
}