如何让ChatGPT辅助你开发

都说最近流行的ChatGPT将来会取代很多行业,也包括了码农。对于这点小编还不能确定。但是在我们还没被取代的时候。其实我们可以利用他来辅助我们平常的开发。

现在讲一下我的使用心得。

在开发过程中,有一次客户给了一个2W多字节一个表达式,由于里面有大量的括号,导致很难看清里面的逻辑。从而想要格式化下表达式。在网上找了很多格式化工具,都没有找到这种格式括号的工具。而自己去写的话,又感觉太浪费时间。从而想到了让ChatGPT去帮我写个方法能格式化这个表达式。

我先截取表达式其中的一小断出来分享。

((key1:(B23B* OR B23C* OR B23D* OR B23F*)) OR ((key1:(G05B19* OR G05B13* OR G05B15* OR G05B19*)) AND (key2:("CNC tool" OR "CNC machine" OR "NC machine" OR "NC tools"))) OR ((key1:(K35B19/18* OR K35B19/19* OR K35B19/2*)) NOT (key1:(G05B19/418*))))OR(((key3:(模具 OR 成型 OR 铸造)) AND (key1:((29C*) OR key1:(21D*) OR key1:(B29L*))) AND (key3:(高端 OR 精密)) AND (key1:((B29C*) OR key1:(B21D*) OR key1:(B21K *) OR key1:(B29L*)*))) OR (key3:(模具 OR 成型 OR 铸造) AND key3:(高端 OR 精密)))

现在看我是如何让ChatGPT帮忙写出自己想要的方法。

  1. 我一开始提问了:java输入一个有很多小括号的字符串,求输出格式化后美观的字符串。

结果显而易见,对方给出的方法不是我想要的。

  1. 接着我又在问题中添加了我的要求

而调用这个方法得到的结果是:

((key1:(B23B* OR B23C* OR B23D* OR B23F*)) OR ((key1:(G05B19* OR G05B13* OR G05B15* OR G05B19*)) AND (key2:("CNC tool" OR "CNC machine" OR "NC machine" OR "NC tools"))) OR ((key1:(K35B19/18* OR K35B19/19* OR K35B19/2*)) NOT (key1:(G05B19/418*))))OR(((key3:(模具 OR 成型 OR 铸造)) AND (key1:((29C*) OR key1:(21D*) OR key1:(B29L*))) AND (key3:(高端 OR 精密)) AND (key1:((B29C*) OR key1:(B21D*) OR key1:(B21K *) OR key1:(B29L*)*))) OR (key3:(模具 OR 成型 OR 铸造) AND key3:(高端 OR 精密))) 
  1. 这虽然有格式化了,但是还达不到我的要求。于是接着让他优化

得到的结果是

((key1:(B23B* OR B23C* OR B23D* OR B23F*)) OR ((key1:(G05B19* OR G05B13* OR G05B15* OR G05B19*)) AND (key2:("CNC tool" OR "CNC machine" OR "NC machine" OR "NC tools"))) OR ((key1:(K35B19/18* OR K35B19/19* OR K35B19/2*)) NOT (key1:(G05B19/418*))))OR(((key3:(模具 OR 成型 OR 铸造)) AND (key1:((29C*) OR key1:(21D*) OR key1:(B29L*))) AND (key3:(高端 OR 精密)) AND (key1:((B29C*) OR key1:(B21D*) OR key1:(B21K *) OR key1:(B29L*)*))) OR (key3:(模具 OR 成型 OR 铸造) AND key3:(高端 OR 精密))) 
  1. 他说是要用递归的方法来调用。可是还是不明白怎么调用,于是接着问

  1. 到现在还是没有得到我想要的结果。那我们就继续再问下去。

这里由于他提供的方法比较长,不好截图。所以最后会提供这个方法的完整版。

而使用这个方法最终得到的结果是

((key1:(B23B* OR B23C* OR B23D* OR B23F*)) OR ((key1:(G05B19* OR G05B13* OR G05B15* OR G05B19*)) AND (key2:("CNC tool" OR "CNC machine" OR "NC machine" OR "NC tools"))) OR ((key1:(K35B19/18* OR K35B19/19* OR K35B19/2*)) NOT (key1:(G05B19/418*))))OR(((key3:(模具 OR 成型 OR 铸造)) AND (key1:((29C*) OR key1:(21D*) OR key1:(B29L*))) AND (key3:(高端 OR 精密)) AND (key1:((B29C*) OR key1:(B21D*) OR key1:(B21K *) OR key1:(B29L*)*))) OR (key3:(模具 OR 成型 OR 铸造) AND key3:(高端 OR 精密))) 

这个结果可以符合心目中的要求了。

所以好用的工具都是你自己一步步调教出来的。

下面是ChatGPT提供的最终方法以及调用方式。

public static void main(String[] args) {String str = "((key1:(B23B* OR B23C* OR B23D* OR B23F*)) OR ((key1:(G05B19* OR G05B13* OR G05B15* OR G05B19*)) AND (key2:(\"CNC tool\" OR \"CNC machine\" OR \"NC machine\" OR \"NC tools\"))) OR ((key1:(K35B19/18* OR K35B19/19* OR K35B19/2*)) NOT (key1:(G05B19/418*))))OR(((key3:(模具 OR 成型 OR 铸造)) AND (key1:((29C*) OR key1:(21D*) OR key1:(B29L*))) AND (key3:(高端 OR 精密)) AND (key1:((B29C*) OR key1:(B21D*) OR key1:(B21K *) OR key1:(B29L*)*))) OR (key3:(模具 OR 成型 OR 铸造) AND key3:(高端 OR 精密))) ";System.out.println(formatExpression(str, 2));
}public static String formatExpression(String expression, int indentLevel) {StringBuilder sb = new StringBuilder();int currentIndentLevel = indentLevel;boolean isInParenthesis = false;for (int i = 0; i < expression.length(); i++) {char c = expression.charAt(i);if (c == '(') {sb.append(c);isInParenthesis = true;currentIndentLevel += 2;if (i + 1 < expression.length() && expression.charAt(i + 1) != '\n') {sb.append('\n');sb.append(String.join("", Collections.nCopies(currentIndentLevel, " ")));}} else if (c == ')') {isInParenthesis = false;currentIndentLevel -= 2;if (sb.charAt(sb.length() - 1) == ' ') {sb.deleteCharAt(sb.length() - 1);}sb.append(c);} else if (c == ',' && isInParenthesis) {sb.append(c);if (i + 1 < expression.length() && expression.charAt(i + 1) != '\n') {sb.append('\n');sb.append(String.join("", Collections.nCopies(currentIndentLevel, " ")));}} else {sb.append(c);}}return sb.toString();
}

本文链接:https://my.lmcjl.com/post/4296.html

展开阅读全文

4 评论

留下您的评论.