gpt4 book ai didi

java - 正则表达式可以做条件值吗?

转载 作者:行者123 更新时间:2023-12-02 03:58:42 25 4
gpt4 key购买 nike

我通过将一组字符串与逗号分隔符连接来生成一个字符串。现在我想编写一个涵盖此代码的单元测试,我想检查集合中的所有字符串是否都已放入连接的字符串中。问题是集合没有排序,所以我无法确定连接的字符串是什么。而且我无法将 Set 更改为有序 Set 或 List,因为我不拥有那段代码。

举个例子,如果我的集合是 {"VAL1", "VAL2"},我的测试当前如下所示:

assertTrue("VAL1,VAL2".equals(concString) || "VAL2,VAL1".equals(concString));

这很好,但如果我的集合有 5 个,甚至 10 个值,这将变得不切实际。所以我考虑将其更改为:

assertTrue("VAL[1-2],VAL[1-2]".matches(concString));

但是,这也可能匹配错误的大小写“VAL1,VAL1”。正则表达式中有没有办法说“使用这组值,但不匹配已经匹配的值”?

最佳答案

一般情况下不会,但在这种情况下,是的。

Pattern.compile("^VAL([12]),VAL(?!\\1\\b)([12])$")

这匹配

  1. VAL
  2. 后跟[12],匹配文本存储在组 1
  3. 后跟 ,VAL
  4. 后跟与第 1 组不同的文本,后跟断字
  5. 后跟[12],匹配文本存储在组 2

“不是”由否定先行运算符 (?!...) 处理,\1 是对存储在组中的内容的反向引用1.

<小时/>

这对于单元测试来说有点复杂。

单元测试代码应该尽可能简单,这样您就不会对正在测试的内容感到困惑。

如果变体数量较少,

ImmutableSet.of("VAL1,VAL2", "VAL2,VAL1").contains(...)

更简单且可读。

如果变体的数量不是那么小,那么拆分、排序和连接可以帮助您获得用于测试的规范值。

关于java - 正则表达式可以做条件值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35154677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com