我正在教導自己使用Java通過教科書進行編程。一個練習要求你寫格式化整個源代碼文件的程序(使用命令行):使用文本I/O重新格式化源代碼
從這個格式(下一行括號風格):
public class Test
{
public static void main(String[] args)
{
// Some statements
}
}
爲此格式(最終的線括號風格):
public class Test {
public static void main(String[] args) {
// Some statements
}
}
下面的代碼我到目前爲止:
import java.io.*;
import java.util.*;
public class FOURTEENpoint12 {
public static void main(String[] args) throws IOException {
if (args.length != 2) {
System.out.println
("Usage: java FOURTEENpoint12 sourceFile targetFile");
System.exit(1);
}
File sourceFile = new File(args[0]);
File targetFile = new File(args[1]);
if (!sourceFile.exists()) {
System.out.println("File does not exist");
System.exit(2);
}
Scanner input = new Scanner(sourceFile);
PrintWriter output = new PrintWriter(targetFile);
String token;
while (input.hasNext()) {
token = input.next();
if (token.equals("{"))
output.println("\n{\n");
else
output.print(token + " ");
}
input.close();
output.close();
}
}
我有兩個問題:
我曾試圖在塊上有許多不同,但不能得到任何接近什麼書是問。我嘗試過正則表達式,delimeters,令牌數組的不同組合,但仍然失敗。
本書要求您重新格式化單個文件,但該章從未解釋如何做到這一點。它只解釋瞭如何將文本重寫爲新文件。所以我只寫了程序來創建一個新文件。但我真的很想按照問題的方式去做。
如果有人能幫助我解決這兩個問題,它實際上可以解決很多練習中遇到的問題。提前致謝。
恕我直言:你應用多行的正則表達式,所以你應該把整個文件放在一個字符串中,然後再使用它。另一個提示:你的正則表達式''''''''和它應該做的恰恰相反:) –
'Scanner'默認使用一個或多個空格字符的分隔符。由於這是可變的,你將無法完全恢復。您可以將分隔符設置爲'\ n',但您可以使用'Scanner.hasNextLine/nextLine'或'BufferedReader'。然後你會檢查'token.matches(「\\ s * {\\ s *」)''。 – Dukeling