我正在尝试打印(Sys.out)字母数字单词,该单词是动态填充在管道分隔文件中的。到目前为止,我已经能够读取文件并逐字逐字地遍历每个字,但是我想整体打印此字,而不是一行一行地逐字打印。
下面是我尝试的代码-
public void extract_id() {
File file= new File("src/test/resources/file.txt");
Scanner sc=null;
String str=null;
try {
sc=new Scanner(file);
while(sc.hasNextLine()){
str=sc.nextLine();
parseID(str);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sc.close();
}
private void parseId(String str) {
String printId;
Scanner sc=new Scanner(str);
sc.useDelimiter("|");
while(sc.hasNext()){
if(sc.next().contains("ID")){
printId=sc.next();
System.out.println("Id is "+printId);
}
}
sc.close();
}
我的目标是打印-AF12345
以示例分隔的管道文件
id|1|session|26|zipCode|73112 id|2|session|27|recType|dummy id|3|session|28|ID|AF12345|
答案 0 :(得分:1)
您的主要问题是您要传递给Scanner.useDelimiter()
的定界符字符串。该方法需要一个正则表达式,并且管道(|
)字符在这种情况下恰好是保留的,这意味着您需要对其进行转义,即调用这样的方法:
sc.useDelimiter("\\|");
但是,您不需要使用其他Scanner
来从文本行中解析ID。 String.split()
就足够了:
private void parseId(String str) {
String[] tokens = str.split("\\|");
for (int i = 0; i < tokens.length; i++) {
if (tokens[i].equals("ID")) {
String idValue = tokens[i + 1]; // this will throw an error if
// there is nothing after ID on
// the row
System.out.println("Id is " + idValue);
break;
}
}
}