以下解答供题主参考,应该还会有更高效的方法。
import java.util.Scanner;
public class Reformat {
public static void main(String[] args) {
String result;
System.out.println("Enter your if-then-else statement and press Enter: ");
// 获得用户输入
Scanner scanner = new Scanner(System.in);
String rawInput = scanner.nextLine();
// 将用户输入按 if 和 else 分开,split("if|else") 代表以 if 和 else 作为
// 关键字分割字符串
String[] splitedStatement = rawInput.trim().split("if|else");
// 从 split() 返回的数组中分别提取 if 和 else 语句中的内容。如果没有 else 语句,
// 将其标记为 null。(因为 if 关键字总在用户输入的开头,而 split() 方法遇到位于
// 字符串开头的分隔符时会在返回的数组中的第一个位置添加一个空字符串,所以这里的
// index 从 1 开始而不是 0,因为 splitedStatement[0] 总是一个空字符串)
String ifStatement = splitedStatement[1];
String elseStatement = splitedStatement.length > 2 ?
splitedStatement[2] : null;
// 从得到的 if 语句中分别抽出其条件和内容,split("\\{|\\}") 代表以 { 和 } 作为
// 关键字分割字符串
String ifCondition = ifStatement.split("\\{|\\}")[0].trim();
String ifContent = ifStatement.split("\\{|\\}")[1].trim();
// 重新将上面两个字符串组成格式化后的 if 语句
String ifResult = "if " + ifCondition +
" {\n\t" + ifContent + "\n}";
// else 语句同理,只不过需要先判断其是否存在,从而避免 NullPointerException
if (elseStatement != null) {
String elseCondition = elseStatement.split("\\{|\\}")[0].trim();
String elseContent = elseStatement.split("\\{|\\}")[1].trim();
String elseResult = "\nelse" +
elseCondition +
" {\n\t" + elseContent + "\n}";
// 将格式化后的 if 和 else 语句组成最终结果
result = ifResult + elseResult;
} else {
// 如果 else 不存在,那么 if 语句就是最终结果
result = ifResult;
}
// 输出结果
System.out.println("\nReformatted result: \n\n" + result);
}
}
if 和 else 都存在的运行结果:
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/9358d109b3de9c824868ca006481800a19d8432b?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
没有 else 语句的运行结果:
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/d000baa1cd11728bfeecbcadc0fcc3cec2fd2c7f?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)