Skip to content

Commit e05f7ea

Browse files
committed
添加生成C# XML doc 注释块的方法
来自 ChatGPT
1 parent 40f6156 commit e05f7ea

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

src/main/java/com/yanglb/codegen/utils/StringUtil.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,53 @@ public static String toValidPropertyName(String input) {
7979
return sb.toString();
8080
}
8181

82+
83+
/**
84+
* 生成 C# XML doc <summary> 注释块。
85+
* <p>
86+
* 格式固定为:
87+
* <pre>
88+
* /// <summary>
89+
* /// line1
90+
* /// line2
91+
* /// </summary>
92+
* </pre>
93+
*
94+
* @param summary 要放到 <summary> 内的文本,可能包含换行符;为 null 时等同于空串
95+
* @param padLeft 每行前面额外的空格数(缩进)
96+
* @return 完整的多行注释字符串(每行以 '\n' 结尾)
97+
*/
98+
public static String generateCSharpSummary(String summary, int padLeft) {
99+
if (summary == null) summary = "";
100+
if (padLeft < 0) padLeft = 0;
101+
102+
String indent = " ".repeat(padLeft);
103+
String linePrefix = indent + "/// ";
104+
StringBuilder sb = new StringBuilder();
105+
106+
// 简单的 XML 实体转义
107+
java.util.function.Function<String, String> escapeXml = s -> {
108+
if (s == null || s.isEmpty()) return s;
109+
return s
110+
.replace("&", "&amp;")
111+
.replace("<", "&lt;")
112+
.replace(">", "&gt;")
113+
.replace("\"", "&quot;")
114+
.replace("'", "&apos;");
115+
};
116+
117+
// 按行分割(支持 \r\n, \r, \n)
118+
String[] lines = summary.split("\\r?\\n|\\r", -1); // 保留尾随空行
119+
120+
sb.append(linePrefix).append("<summary>").append("\n");
121+
for (String line : lines) {
122+
sb.append(linePrefix).append(escapeXml.apply(line)).append("\n");
123+
}
124+
sb.append(linePrefix).append("</summary>");
125+
126+
return sb.toString();
127+
}
128+
82129
// 简单测试
83130
public static void main(String[] args) {
84131
System.out.println(toValidPropertyName("123Name")); // _23Name

0 commit comments

Comments
 (0)