我正在尝试在java中创建一个preProcessor,它将在源代码中读取。我试着将所有代码读取到一个字符串中。
问题:如何在<<<<<<<<< >>>到它自己的某种数组列表。
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();
}
}
}
}
文本文件sourceCode在一行中包括“Mo&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; Mo Larry Curly&gt;&gt;&gt;&gt; Larry”。如果&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; &GT;&GT;&GT;但是当我添加更多时,我收到了错误。
出现错误消息:外部令牌:Mo
外部令牌:&lt;&lt;&lt; LineC:莫 [Mo]线程“main”java.util.InputMismatchException中的异常 在java.util.Scanner.throwFor(未知来源) 在java.util.Scanner.next(未知来源) 在java.util.Scanner.next(未知来源) at processLines.pLine(processLines.java:26) 在proProcess.main(proProcess.java:14)
答案 0 :(得分:3)
问题在于,当您可能不是下一个标记时,您正在寻找下一个标记为关闭小门。我打破逻辑,以便您可以从输入文件中逐行读取。如果一条线有你的wicket分隔符,则使用不同的扫描仪在wicket之间分割内容。这是代码。这适用于wick和wick的wickets和line内的零到多个令牌。
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();
}
}