我必须将java源代码从下一个花括号样式转换为行尾卷曲括号样式。
我找到了一种使用格式化String(使用\ n和\ t)执行此操作的方法,并且它工作正常,但我必须从File中读取源代码。
以下代码
public class Test
{
public static void main(String[] args)
{
// Some statements
}
}
public class Test {
public static void main(String[] args) {
// Some statements
}
}
现在,我接近这个的方式如下:
提到的\ n和\ t的代码如下(我们将此命名为 String s2 )
public class Test\n" +
"{\n" +
"\tpublic static void main(String[] args)\n" +
"\t{\n" +
"\t\t// Some statements\n" +
"\t}\n" +
"}\n
然后我编写了以下代码,将其转换为行尾样式。
s2 = s2.replaceAll("\\t\\{", "{");
StringBuilder stringBuilder = new StringBuilder(s2);
for (int i = 0; i < stringBuilder.length(); i++) {
if (stringBuilder.charAt(i) == '{') {
stringBuilder.deleteCharAt(i);
stringBuilder.insert(i - 1, " {");
}
}
就我检查而言,这是有效的。
现在实际问题;
当我从文件中读取时,源代码没有任何\ t和\ n我希望将源代码转换为字符串,就像上面的字符串(s2)有\ t和\ ñ
为了澄清,我使用以下方法从输入中读取:
File sourceFile = new File("oldFormattedSourceCode.txt");
String oldFormatString = "";
try (Scanner input = new Scanner(sourceFile);) {
while (input.hasNext()) {
oldFormatString += input.nextLine();
}
System.out.println("Old Format String is: " + oldFormatString.toString());
} catch (FileNotFoundException ex) {
System.out.print(ex.getMessage());
}
这给了我以下输出
Old Format String is: public class Test{ public static void main(String[] args) { // Some statements }}
这个String对我没用,因为它没有\ n和\ t,我编写的代码依赖于这些。
请建议。
答案 0 :(得分:0)
使用Scanner
FileReader
来阅读您的文件
try (FileReader input = new FileReader(sourceFile);) {
int i = 0;
StringBuffer sb = new StringBuffer();
while ((i=input.read())!=-1) {
sb.append((char)i);
}
oldFormatString = sb.toString();
System.out.println("Old Format String is: " + oldFormatString.toString());
} catch (FileNotFoundException | IOException ex) {
System.out.print(ex.getMessage());
}
如果使用FileReader
,您可以阅读单个字符,因此您不会错过任何字符。
答案 1 :(得分:0)
您只需要StringBuilder
并逐行检查输入文件:
private static String convert(File file) throws FileNotFoundException {
final String lineSeparator = System.getProperty("line.separator");
StringBuilder buf = new StringBuilder();
try (Scanner scan = new Scanner(file)) {
while (scan.hasNext()) {
String line = scan.nextLine();
if ("{".equals(line.trim()))
buf.append(" {").append(lineSeparator);
else {
if (buf.length() > 0)
buf.append(lineSeparator);
buf.append(line);
}
}
return buf.toString();
}
}