package info.istlab.IoTP; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; public class IndentProgram { public static String indent(String input) throws IOException { BufferedReader br = new BufferedReader(new StringReader(input)); ArrayList<String> sb; // 一時保存用 sb = new ArrayList<String>(); ArrayList<Integer> idt; idt = new ArrayList<Integer>(); ArrayList<String> out; // 一時保存用 out = new ArrayList<String>(); String line; while ((line = br.readLine()) != null) { line = line.trim(); // 行頭と行末の空白を除去する sb.add(line); } br.close(); int indentLevel = 0; boolean tobeaddindent = false; for (String lorig : sb) { String l = removeComment(lorig); l = l.trim(); if (tobeaddindent){ indentLevel += 2; tobeaddindent = false; } // } があれば、その行から-2 if (l.startsWith("}")) { indentLevel -= 2; } if (l.endsWith("{")) { // { があれば、次の行から+2 tobeaddindent = true; } idt.add(indentLevel); // それ以外は、プラマイZero } for (int i = 0; i < sb.size(); i++) { int il = idt.get(i); out.add(printIndent(il) + sb.get(i)); } StringBuffer strb = new StringBuffer(); for(String l: out){ strb.append(l+"\n"); } return strb.toString(); } // インデントを出力するためのヘルパー関数 private static String printIndent(int indentLevel) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < indentLevel; i++) { sb.append(" "); } return sb.toString(); } public static String removeComment(String input) { int index = input.indexOf("//"); // "//"のインデックスを検索する if (index != -1) { // "//"が見つかった場合 return input.substring(0, index); // "//"より前の部分文字列を返す } return input; // "//"が見つからなかった場合、元の文字列を返す } }