【问题标题】:Converting String arguments to StringBuffer将字符串参数转换为 StringBuffer
【发布时间】:2014-10-21 11:12:55
【问题描述】:

我想使用 StringBuffer 而不是将字符串与结果连接起来。我使用此代码转换了 while 循环,但最后一个 if 语句遇到了问题。我能做些什么来转换它?

原码:

result = statement.executeQuery(sql);    
String string = "";

    while (result.next()) {
        string += result.getString(("Hello") + ",");
    }

    if (string!= null && !string.isEmpty()) {
        string= string.substring(0, string.length() - 1);
    }

我的尝试:

result = statement.executeQuery(sql);
StringBuffer string = new StringBuffer("");

      while (result.next()) {
        string.append(("Hello") + ",")
      }

      if {
        --- CODE HERE ---
      }

有什么帮助吗?

【问题讨论】:

  • 你想做什么?
  • 请注意,(("Hello") + ",") 将评估为 "Hello,"
  • 避免使用 "+=" 连接字符串,而是使用 StringBuffer 连接。我知道如何像上面的尝试一样附加它,我唯一的问题是如何将底部的 if 语句转换为使用 StringBuffer 而不是 String?
  • 如果您需要线程安全,则使用 StringBuffer。也许考虑使用 StringBuilder。此外,“但我在最后一个 if 语句上遇到了问题。”并没有告诉我们很多关于您面临的问题。
  • deleteCharAt?如有疑问,请查看类的 javadoc。您很有可能会看到自己需要什么。

标签: java string if-statement append stringbuffer


【解决方案1】:
    result = statement.executeQuery(sql);    
    StringBuffer buffer = new StringBuffer();

    int length = result.size();

    if(result != null && length > 0)
    {
        while (result.next()) { 
            buffer.append(result.getString(("Hello"));
            if(--length > 0)
                buffer.append(",");
        }
    }

【讨论】:

    【解决方案2】:

    这是您可以使用 if 语句执行的操作。

    结果 = statement.executeQuery(sql);

    StringBuffer stringBuffer = new StringBuffer("");

      while (result.next()) {
        stringBuffer.append(("Hello") + ",")
      }
    
        if (stringBuffer.length()>0) {
            stringBuffer = new StringBuffer(stringBuffer.substring(0, stringBuffer.length() - 1));
        }
    

    【讨论】:

    • 为什么使用toString() 而不仅仅是检查缓冲区的长度?该对象存在是因为他在上面创建了它,所以空值检查什么也不做,StringBuffer 上有一个length() 方法@
    • 感谢@kingdamian42 的建议。
    【解决方案3】:

    如果您只是想删除最后一个逗号,试试这个:

    StringBuffer buffer = new StringBuffer("");
    ...
    if ( buffer.length() > 0 ) {
        buffer.deleteCharAt( buffer.length() - 1 );
    }
    

    【讨论】:

    • @ajb 是的,我真的很困惑。该代码中有几个非常可疑的想法,我认为也许 OP 没有很好地转录它。
    • @markspace 我同意,甚至没有注意到 if 声明在 OPs 问题中在技术上是无用的 - 不知道他是否会插话并说出他真正想要的内容
    • @kingdamian42 哦,dangit 是的,你是对的,我一定要疯了。 (String.substring(...) doc: 子字符串从指定的 beginIndex 开始并延伸到索引 endIndex - 1 处的字符)
    猜你喜欢
    • 2018-05-23
    • 2011-12-13
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多