如何让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输入一个有很多小括号的字符串,求输出格式化后美观的字符串。

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

如何让ChatGPT辅助你开发_第1张图片
  1. 接着我又在问题中添加了我的要求

如何让ChatGPT辅助你开发_第2张图片

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

((
    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. 这虽然有格式化了,但是还达不到我的要求。于是接着让他优化

如何让ChatGPT辅助你开发_第3张图片

得到的结果是

((
        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. 他说是要用递归的方法来调用。可是还是不明白怎么调用,于是接着问

如何让ChatGPT辅助你开发_第4张图片
  1. 到现在还是没有得到我想要的结果。那我们就继续再问下去。

如何让ChatGPT辅助你开发_第5张图片
如何让ChatGPT辅助你开发_第6张图片

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

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

(
    (
      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();
}

你可能感兴趣的:(java,ai)