Java:文件阅读器,字符串分隔符分隔符帮助
问题描述:
我想在java中创建一个预处理器,它将在源代码中读取它。我试着将代码全部读到一个字符串中。Java:文件阅读器,字符串分隔符分隔符帮助
问题:如何将< < < >>>中间的字符串添加到它自己的某种数组列表中。
public class processLines {
public void pLine (String FileName)throws IOException{
Scanner scanner = null;
try{
scanner = new Scanner(new BufferedReader(new FileReader(FileName)));
while (scanner.hasNext()) {
String Line = "";
String LineB = "";
String LineC = "";
ArrayList<String> inside = new ArrayList<String>();
Line = Line + scanner.next()+ " ";
System.out.println("outside token: "+ Line);
StringTokenizer token = new StringTokenizer(Line);
while(token.hasMoreTokens()&& token.nextToken() != null){
LineB = Line;
if(LineB.contains("<<<")){
if(!LineB.contains(">>>")){
LineC = LineC + scanner.next()+ " ";
inside.add(LineC);
System.out.println("LineC: " + LineC);
System.out.print(inside);
}
if(scanner.next(">>>") != null){
Line = scanner.next();
System.out.println("Line INside:" + Line);
}
}
}
}
}
finally {
if (scanner != null) {
scanner.close();
}
}
}
}
文本文件源代码包含 “莫< < <莫拉里卷毛>>>拉里” 都在同一行。如果只有一个名字在< < < >>>中,但是当我添加更多时,此代码有效。外部令牌:
发生错误消息沫
外部令牌:< < < LineC:沫 [Mo]的异常在线程 “主” java.util.InputMismatchException 在java.util.Scanner中.throwFor(未知来源) 在java.util.Scanner.next(未知来源) 在java.util.Scanner.next(未知来源) 在processLines.pLine(processLines.java:26) 在proProcess.main( proProcess.java:14)
答
问题是,您正在寻找下一个令牌作为关闭的小门,当这可能不是下一个令牌。我会打破逻辑,以便可以从输入文件逐行阅读。如果一行有您的检票分隔符使用不同的扫描仪来分隔这些检票之间的内容。这是代码。这适用于在wicket和wicket中没有许多标记的小令牌。
public static void pLine (String FileName)throws IOException{
Scanner scanner = null;
try{
scanner = new Scanner(new BufferedReader(new FileReader(FileName)));
String line;
ArrayList<String> inside;
Scanner inner;
int start;
int end = 0;
while (scanner.hasNextLine()) {
line = scanner.nextLine();
inside = new ArrayList<String>();
start = line.indexOf("<<<", end);
end = line.indexOf(">>>", start+1);
if (end > start) {
inner = new Scanner(line.substring(start +3, end));
while (inner.hasNext()) {
inside.add(inner.next());
}
}
System.out.println("inside : " + inside);
}
}
catch (Throwable t) {
t.printStackTrace();
}
finally {
scanner.close();
}
}