【问题标题】:How do I concatenate two strings and store them into the same struct key如何连接两个字符串并将它们存储到同一个结构键中
【发布时间】:2011-04-07 01:33:30
【问题描述】:

我正在使用 Coldfusion。我想将两个字符串连接到同一个结构键中,但我不断收到“无法将 x 转换为布尔值”的错误。

例如:

<cfset myStruct.string1 = nodes[1].string1.XmlText>
<cfset mystruct.string2 = nodes[1].string2.XmlText>

以下都不行

<cfset myStruct.concatendatedSring = nodes[1].string1.XmlText AND nodes[1].string2.XmlText>
<cfset myStruct.concatendatedSring = myStruct.string1 AND myStruct.string2>

为什么这两种方法都不起作用?

【问题讨论】:

    标签: string coldfusion struct


    【解决方案1】:

    我通过 4 种不同的连接字符串的方式对 CF10 进行了多次非正式测试,结果令人惊讶。我做了 50k 次迭代,以各种方式添加“HELLO”。我在下面按从慢到快的顺序列出了一些粗略的数据。这些数字在 10 个不同的请求中是一致的,因此是平均值:

    string1 = "#string1##string2#"; // ~4800ms
    string1 = string1 & string2; // ~ 4500ms
    string1 &= string2; // ~4200ms
    
    string1 = createObject("java",  "java.lang.StringBuffer").init();
    string1.append(string2); // ~250ms
    

    这些按我预期的顺序排列,但对StringBuffer 的速度之快感到惊讶。我觉得在连接大量字符串数据(例如 CSV 或类似数据)时,您将充分利用这一点。在典型的一次性操作中,我没有进行任何详细的测试来权衡一个选项而不是另一个选项。

    【讨论】:

    • StringBuffer 的另一个优点是它不会尝试将看起来像数字的字符串转换为整数(如果字符串长于整数的允许长度,则可能会失败)。
    • 没有意义。字符串分配和连接需要超过 4 秒 !!??看起来您的测试结果中多了一个 0。
    【解决方案2】:

    除了亨利的回答,你还可以像这样连接两个字符串:

    <cfset myStruct.concatendatedSring="#myStruct.string1##myStruct.string2#">
    

    【讨论】:

    • 我在过去几周对 Cf9 进行了一次非正式测试,惊讶地发现这种方法对于单个连接明显慢了。这对两个人来说几乎一样糟糕。我认为这是因为 CF 处理执行区域的方式,但这是一个猜测。
    【解决方案3】:

    &amp; 是字符串连接运算符,AND&amp;&amp; 是布尔运算符。

    <cfset myStruct.concatendatedSring = myStruct.string1 & myStruct.string2>
    

    【讨论】:

      猜你喜欢
      • 2022-07-05
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 2010-10-14
      • 1970-01-01
      相关资源
      最近更新 更多