如何在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
代码说明
- 用
String voltage_prefixes[] = {...}创建字符串数组,存放所有需要匹配的电压前缀。 - 通过
len()获取数组长度,用for循环遍历每个元素。 - 调用
BeginsWith()方法判断输入字符串是否以当前前缀开头,一旦找到匹配立即返回1,避免不必要的遍历。 - 若遍历完所有前缀都无匹配,返回0。
对比你原来的代码,这种循环方式逻辑更直观,也避免了Find()返回值相乘可能导致的逻辑错误(比如当多个前缀都不匹配时,sum会变成正数,导致返回错误结果)。
内容的提问来源于stack exchange,提问作者ChenZX
相关产品推荐
相关产品推荐

