You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在dm-script中用for循环判断字符串是否包含列表中的指定词汇?

在DM脚本中判断字符串是否包含列表中的任意词汇

需求描述

我想判断一个字符串是否包含列表中的某个词汇。例如,有三个字符串:120kV_xxxx、200kV_abc、abcdefg,希望筛选出以电压前缀开头的字符串,排除最后一个。

当前使用的DM脚本代码

Number find_voltage_prefix(String input)
{
    Number sum = -1
    sum *= input.find("80kV")
    sum *= input.find("120kV")
    sum *= input.find("200kV")

    if (sum==0) return 1
    else return 0
}

Result(find_voltage_prefix("120kV_xxxx"))

问题

在Python中,我可以创建类似["80kV", "120kV", "200kV"]的列表,然后用for循环判断字符串是否包含列表中的任意词汇。请问在DM脚本中是否有类似的实现方法?


解答

DM脚本支持字符串数组(类似Python的列表)结合循环的方式实现这个需求,逻辑比你当前的代码更清晰可靠。考虑到你是要判断字符串是否以指定前缀开头,用BeginsWith()方法比Find()更精准(Find()会匹配字符串中任意位置的子串,而BeginsWith()只匹配开头)。

以下是实现代码:

Number has_voltage_prefix(String input)
{
    // 创建电压前缀的字符串数组
    String voltage_prefixes[] = {"80kV", "120kV", "200kV"}
    Number count = len(voltage_prefixes)
    
    // 遍历数组中的每个前缀
    for (Number i = 0; i < count; i++)
    {
        // 判断输入字符串是否以当前前缀开头
        if (input.BeginsWith(voltage_prefixes[i]))
        {
            return 1  // 找到匹配,返回1
        }
    }
    return 0  // 遍历完无匹配,返回0
}

// 测试示例
Result(has_voltage_prefix("120kV_xxxx"))  // 输出1
Result(has_voltage_prefix("200kV_abc"))   // 输出1
Result(has_voltage_prefix("abcdefg"))     // 输出0

代码说明

  1. 用String voltage_prefixes[] = {...}创建字符串数组,存放所有需要匹配的电压前缀。
  2. 通过len()获取数组长度,用for循环遍历每个元素。
  3. 调用BeginsWith()方法判断输入字符串是否以当前前缀开头,一旦找到匹配立即返回1,避免不必要的遍历。
  4. 若遍历完所有前缀都无匹配,返回0。

对比你原来的代码,这种循环方式逻辑更直观,也避免了Find()返回值相乘可能导致的逻辑错误(比如当多个前缀都不匹配时,sum会变成正数,导致返回错误结果)。


内容的提问来源于stack exchange,提问作者ChenZX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:25:08