如何自动缩进下一行字符串
How to auto indent next line of string
我正在尝试使用 Python 制作一个程序,当遇到某些字符(例如大括号)时,它会自动缩进字符串的下一行。
例如:
public class Example{
--indent--> public static void main (String[]args){
--indent--> System.out.println("Hello");
}
}
我似乎无法理解为了实现这一点我需要编写什么代码。
如有任何帮助,我们将不胜感激!
这是一种快速而肮脏的方法。基本上我只是遍历输入字符串的行 (cppcode
) 并跟踪当前缩进 (tabdepth
)。当我在输入行中遇到大括号时,我会向上或向下增加 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)
老实说,您设置代码的确切方式取决于您是否对它进行了其他操作 "pretty print"。
大致的轮廓可能看起来像这样
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");
}
}
}
我正在尝试使用 Python 制作一个程序,当遇到某些字符(例如大括号)时,它会自动缩进字符串的下一行。
例如:
public class Example{
--indent--> public static void main (String[]args){
--indent--> System.out.println("Hello");
}
}
我似乎无法理解为了实现这一点我需要编写什么代码。
如有任何帮助,我们将不胜感激!
这是一种快速而肮脏的方法。基本上我只是遍历输入字符串的行 (cppcode
) 并跟踪当前缩进 (tabdepth
)。当我在输入行中遇到大括号时,我会向上或向下增加 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)
老实说,您设置代码的确切方式取决于您是否对它进行了其他操作 "pretty print"。 大致的轮廓可能看起来像这样
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");
}
}
}