改变大括号的样式

时间:2016-02-04 23:40:55

标签: java arraylist file-io printwriter

您好我想编写一个更改Java程序的程序 从下一个大括号样式到这样的终端大括号样式

公共课测试

{

     public static void main(String [] args)

    {


    if (expr)

    {

    }
}

到此

public class Test {

    public static void main(String [] args) {

    if (expr) {

    }

}

程序应该从用户读入(用“输入文件名:”提示它们) 包含要更改的程序的文件的名称。如果文件不能 打开,向用户输出错误消息(“错误文件名”)并提示 再次输入文件名,修改后的文件应写回您读取的同一文件 从。您无法在打开文件的同时打开文件进行阅读 写作。因此,您应该存储要写入文件的行 在字符串的ArrayList中,然后在它们之后将它们写入文件 关闭用于读取文件的扫描程序对象

这是我到目前为止写的,我遇到了错误。谁能帮忙, 谢谢

import java.util.ArrayList;
import java.util.Scanner;
import java.io.File;
import java.io.PrintWriter;

public class Extension {

    public static void main(String[] args){
      Scanner input = new Scanner(System.in);
      String fileName = "";
      System.out.println("Enter File Name: ");
      fileName = input.next();
      File f = new File("src/" + fileName);
      do{
       if(f.exists()){

               }
        else{
        System.out.println("Bad filename");
        System.out.println("Enter File Name: ");
        fileName = input.nextLine();
     }

    } while (!(f.exists()));

    ArrayList<String> fileRead = new ArrayList<String>();
    String paran = ("{");
    String newLine = "";
    while(input.hasNextLine()) {
    fileRead.add(input.nextLine());
   }
    input.close();
    f.close;
    //File f = new File("src/"+ fileName);

   PrintWriter output = new PrintWriter(f);
   output.print(fileRead.get(0)) ;
   for(int i = 1; i < fileRead.size()-1 ; i++){
      if(fileRead.get(i).equals("{")){
      newLine = fileRead.get(i-1);
      newLine += paran;
    }
    else
     output.print(fileRead.get(i)); 
   }



   }

}

3 个答案:

答案 0 :(得分:1)

  

我想编写一个程序,将Java程序从下一个支撑样式更改为行尾支撑样式

这是一个你可以做的事情:

  1. 逐行从Java文件中读取
  2. 将当前代码行存储到列表中(根据您的要求)
  3. 如果当前行为空(换行符或仅包含空格),emptyLine++;
  4. 继续,直到您遇到非空行。
  5. 如果现在,您点击了不以{开头的行,请在n列表中添加n equals value of emptyLine个换行符,然后添加该非空行。 emptyLine = 0;
  6. 否则,如果您点击{行,请从列表中删除之前添加的字符串中的最后一个换行符,并将当前行代码直接添加到列表中(不添加您刚刚计算的所有换行符)现在)。 emptyLine = 0;
  7. 继续此过程,直至到达文件末尾。
  8. 关闭文件扫描程序,并根据列表将其写回文件。
  9. 您可以创建一些辅助方法来帮助您,例如:

    public boolean isEmptyLine(String text){
        //Return true if text only contains whitespace, tabs & newline
    }
    
      

    我不知道从哪里开始,我很困惑,我不知道如何使用Text I / o任何事情都可以帮助我

    我建议你先做一些阅读和写文件练习。

答案 1 :(得分:0)

您应该能够使用正则表达式匹配来执行此操作。

这应该梳理括号后面的任何开括号:

String outputString = inputString.replaceAll("\)\s*\{", ") {");

我现在太累了,无法弄清楚如何在类声明后匹配open大括号,但它应该可以使用正则表达式。

答案 2 :(得分:0)

查看Java I / O类,特别是File,BufferedReader和InputStreamReader。您可以通过在System.in上放置BufferedReader来从控制台读取,如下所示:

BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

然后你可以简单地使用

String input = stdIn.readLine();

还有文件的读者和作者。以FileInputStream为例吧!也许this也可以帮到你。

至于&#34;错误的文件名&#34;错误,这可以通过捕获异常来完成。

try {
    File inputFile = new File(filename);
}
catch (Exception e) {   // You replace this catch by any kind of exception, e.g. an IOException. You can add as many catches as necessary. A modern IDE or your compiler will tell you that you forgot to catch a specific Exception as well.
    System.out.println("Bad filename");
}

查看Oracle的this课程。

要查看当前行是否只包含大括号,一个好的开始可能是检查:

String tmp = currentLine.trim();
if (tmp.equals("{")) {
    // Do what you have to do with opening braces
} else if (tmp.equals("}")) {
    // Do what you have to do with closing braces
}

Stack数据结构可以帮助您附加到前一行。这是一个LIFO结构,就像你的日常堆栈一样。您可以使用myStack.pop()来获取上一行代码。您可以在其周围放置一个while循环以保持弹出,直到您获得非空或空白行代码:

String lastLine;
while ((lastLine = myStack.pop()).trim().equals(""))
    continue;
lastLine.append(" {");

(这只是一个例子)