我正在尝试使用 Python 制作一个程序,该程序会在遇到某些字符(例如大括号)时自动缩进下一行字符串。
例如:
public class Example{
--indent--> public static void main (String[]args){
--indent--> System.out.println("Hello");
}
}
我似乎无法掌握我需要编写什么代码才能实现这一目标。
任何形式的帮助将不胜感激!
我正在尝试使用 Python 制作一个程序,该程序会在遇到某些字符(例如大括号)时自动缩进下一行字符串。
例如:
public class Example{
--indent--> public static void main (String[]args){
--indent--> System.out.println("Hello");
}
}
我似乎无法掌握我需要编写什么代码才能实现这一目标。
任何形式的帮助将不胜感激!
老实说,您设置代码的确切方式取决于您是否正在对其进行其他操作以“漂亮地打印”它。某物的粗略轮廓可能如下所示
def pretty(s):
start = "{"
end = "}"
level = 0
skip_start = False
for c in s:
# raise or lower indent level
if c == start:
level += 1
if c == end:
level -= 1
if level < 0:
raise IndentationError("Error Indenting")
if c == "\n":
skip_start = True # I'm bad at naming just a flag to mark new lines
if c.isspace() and skip_start:
pass #skip whitspace at start of line
else:
if skip_start:
print("\n", " " * level, end="") #print indent level
skip_start = False
print(c, end = "") #print character
pretty('''
public class Example{
public static void main (String[]args){
if (1==1){
//do thing
//do other thing
// weird messed up whitespace
}else{
System.out.println("Hello");
}
}
}
''')
会输出
public class Example{
public static void main (String[]args){
if (1==1){
//do thing
//do other thing
// weird messed up whitespace
}else{
System.out.println("Hello");
}
}
}
这是一种快速而肮脏的方法。基本上我只是遍历输入字符串的行 ( cppcode
) 并跟踪当前的缩进 ( tabdepth
)。当我在输入行中遇到大括号时,我会向上或向下增加制表符深度,然后将tabdepth
制表符的数量添加到输出行。
cppcode = '''
public class Example{
public static void main (String[]args){
System.out.println("Hello");
}
}
'''
tabdepth = 0
for line in cppcode.split("\n"):
depth_changed = False
indentedline = ''.join(['\t'*tabdepth, line])
for c in line:
if c == '{':
tabdepth += 1
elif c == '}':
tabdepth -= 1
depth_changed = True
if depth_changed:
indentedline = ''.join(['\t'*tabdepth, line])
print(indentedline)