您好我想编写一个更改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));
}
}
}
答案 0 :(得分:1)
我想编写一个程序,将Java程序从下一个支撑样式更改为行尾支撑样式
这是一个你可以做的事情:
emptyLine++;
{
开头的行,请在n
列表中添加n equals value of emptyLine
个换行符,然后添加该非空行。 emptyLine = 0;
{
行,请从列表中删除之前添加的字符串中的最后一个换行符,并将当前行代码直接添加到列表中(不添加您刚刚计算的所有换行符)现在)。 emptyLine = 0;
您可以创建一些辅助方法来帮助您,例如:
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(" {");
(这只是一个例子)