
1 haoz1w0w 2020-12-30 11:48:04 +08:00 >1 不就行了 |
2 boris93 2020-12-30 11:48:22 +08:00 via Android 就不能用 bool ? |
3 jimliang 2020-12-30 11:50:01 +08:00 人才 |
4 flyfanc 2020-12-30 11:50:07 +08:00 Arrays.asList("1", "0").containsAll(Arrays.asList(w1,w2,w3,…)); |
5 jintianfengda 2020-12-30 11:55:24 +08:00 抽出来方法封装呗 public boolean checkAll(String... args){} 代码洁癖患者提醒,最好使用"1".equals(open)哦,01 用枚举替代 |
6 nutting OP @haoz1w0w 没写清楚,是字符的 0 或者 1 @boris93 呃,历史原因,不过也对啊,看看能不能改 @jintianfengda 抽不抽好说,关键是判断的写法 @flyfanc 你这个写法我研究一下 |
7 Gilgamesh7 2020-12-30 12:05:07 +08:00 假设接收参数的是 body,使用 validation 注解校验参数,然后字段注解使用 @Pattern,写个正则判断一下是字符串 0 或 1 |
8 yuk1no 2020-12-30 12:05:22 +08:00 via iPhone Stream.of(x, y, z).allMatch(s -> s.equals("0") || s.equals("1")); |
9 chendy 2020-12-30 12:16:21 +08:00 1 抽单个的判断方法 boolean isValid(String x) { return "0".equals(x) || "1".equals(x); } 2 抽一堆的判断方法 boolean isValid(String... xs) { for(String x in xs) { if (!isValid(x)) {return false} } return true;} |
10 Mohanson 2020-12-30 12:20:20 +08:00 via Android r = a b c ... r = r & 0 if r != 0 , throw |
11 rb6221 2020-12-30 12:20:23 +08:00 via iPhone 你们花样真多……枚举他不香嘛 |
12 Mohanson 2020-12-30 12:22:04 +08:00 via Android r = r & (0xffffffff - 1) 上面公式有误,fix |
13 lxychn 2020-12-30 12:25:27 +08:00 ``` for (String arg : Arrays.asList(w1, w2, w3)) { i (!arg.equals("0") && !arg.equals("1")) { throw new Exception("Invalid arg: " + arg); } } ``` |
14 xe2vherd 2020-12-30 12:25:56 +08:00 via iPhone 计数 |
15 Cabana 2020-12-30 12:26:04 +08:00 用位运算 mask 掩码模式 |
16 zhanglintc 2020-12-30 12:57:00 +08:00 用正则如何: import java.util.regex.*; String pattern = "[01]"; if ( !(Pattern.matches(pattern, open) && Pattern.matches(pattern, w1) && Pattern.matches(pattern, w2) && Pattern.matches(pattern, w3) && Pattern.matches(pattern, w4) && Pattern.matches(pattern, w5) && Pattern.matches(pattern, w6) && Pattern.matches(pattern, w7)) ) { throw new Exception("设置项目参数非法!"); } |
17 JQD6r41PkI4o2mEz 2020-12-30 13:04:41 +08:00 via Android 拼起来用正则 |
18 zhuawadao 2020-12-30 13:13:08 +08:00 把这几个变量直接拼成字符串,然后用正则看是否只有 0 或只有 1 |
19 lonelinsky 2020-12-30 13:14:41 +08:00 via Android new 一个 Set, 然后变量全 put 然后检查 Set 的 size 和 content |
20 yanhh 2020-12-30 13:20:56 +08:00 这种都是用二进制掩码来做,楼主应该没写过底层一点的东西,哈哈,可以看看最靠近的 WinAPI,里边有很多。 |
21 zunceng 2020-12-30 13:22:54 +08:00 开个脑洞 设计个注解式的 validator? class A extern Validator { // value_of=1,2,3; int A; // min=0; max=10; int B; // value_of="0", "1" string C; } method: bool IsValid() string ErrorMessage() |
22 chendy 2020-12-30 13:23:07 +08:00 说二进制的朋友们……没看到楼主的是字符串么 |
23 LGA1150 2020-12-30 13:26:07 +08:00 if (Stream.of(open, w1, w2).anyMatch(x -> !"0".equals(x) && !"1".equals(x))) throw ... |
24 marcong95 2020-12-30 13:26:37 +08:00 Pattern.matches("[01]{8}", open+w1+w2+w3+w4+w5+w6+w7) |
25 Flywith24 2020-12-30 13:32:45 +08:00 |
26 hfc 2020-12-30 13:51:18 +08:00 new 个 set,初始只有字符串的 0 和 1,后续把上面这一串变量往里面塞,最后 set.size()>2 就是存在非法参数 |
27 phpfpm 2020-12-30 14:10:00 +08:00 你拆成多个 if-elseif 多好 这样 throw 的时候你还有在哪出问题的 context |
28 sutra 2020-12-30 14:17:05 +08:00 |
29 Ranying 2020-12-30 14:22:38 +08:00 遍历这些变量拼接的字符串 |
30 liyanggyang 2020-12-30 14:26:24 +08:00 @yuk1no 这个可 |
31 lululau 2020-12-30 14:28:59 +08:00 Stream.of(w1, w2, ...).anyMatch(w -> w.matches("[01]")) |
32 lululau 2020-12-30 14:29:20 +08:00 Stream.of(w1, w2, ...).anyMatch(w -> !w.matches("[01]")) |
33 Cbdy 2020-12-30 14:29:30 +08:00 Stream.of(w1, w2, w3, w4, w5).allMatch(List.of("0", "1")::contains); |
34 Lemeng 2020-12-30 14:34:26 +08:00 正则好写 |
35 otakustay 2020-12-30 14:44:56 +08:00 容易玩脱的办法:把 0 和 1 拼起来变二进制再转数字,然后用位操作判断 |
36 laqow 2020-12-30 14:56:04 +08:00 via Android 如果是用户界面的话就几个控件单次运算的,这么写写可以的吧 |
37 Joker123456789 2020-12-30 15:31:54 +08:00 枚举啊,不是 0 和 1 赋值不进去, 然后判空即可。 |
38 KarmaWu 2020-12-30 16:07:39 +08:00 Stream.of(w1, w2, w3, w4, w5, w6, w7).allMatch(List.of("0", "1")::contains); |
39 Vegetable 2020-12-30 16:57:28 +08:00 太逗了吧,字符串拼起来正则一下如何。 |
40 weidaizi 2020-12-30 17:48:43 +08:00 感觉回复挺火热的,但是出现这种丑陋的检测,难道不是之前类型的设计思路出问题了吗? 改这里多半不是好的办法 |
41 corningsun 2020-12-30 18:01:53 +08:00 提醒下,open 前面有个 `!`,只对 open 有效。建议写好单元测试再重构 https://gist.github.com/corningsun/1afdd69da58d3ed7888ce022be76d4da |
42 Gwkang 2020-12-30 19:33:42 +08:00 via Android 变参加递归 |
43 akira 2020-12-30 23:34:24 +08:00 既然你只是要过 chekcstyle 。。。 if (!(open.equals("0") || open.equals("1")) ) { throw new Exception("设置项目参数非法!"); } if (!(w1.equals("0") || w1.equals("1")) ) { throw new Exception("设置项目参数非法!"); } if (!(w2.equals("0") || w2.equals("1")) ) { throw new Exception("设置项目参数非法!"); } |
44 stevefan1999 2020-12-31 03:14:40 +08:00 真值表啊 |
45 stevefan1999 2020-12-31 03:19:19 +08:00 草那好了 ```js const isAcceptable = str => /0|1/.matches(str) if ([open, w1, w2, w3, w4, w5, w6, w7].map(isAcceptable).filter(x => !x).length > 0) { throw new Exception("设置项目参数非法!"); } ``` |
46 ojbkojbk 2020-12-31 10:39:26 +08:00 你这个参数应该是从接口传入的吧,在接口的入参用注解正则校验 另外在 equals 的时候 ,常量放在前面,防止封装类型传入空报指针 |
47 xx6412223 2020-12-31 10:48:33 +08:00 这代码看着被人看了要被骂的 |
48 weizhen199 2020-12-31 10:53:46 +08:00 0000,0001,1101,0101 lz 你看看这个像啥 |
49 TheF00L 2020-12-31 14:16:07 +08:00 枚举多好 |
50 daryl 2020-12-31 15:18:31 +08:00 枚举不行么? |
51 checkzhzzzzz 2020-12-31 15:27:37 +08:00 map.put(str,""); map.size() |
52 SkyLine7 2021-01-04 15:19:36 +08:00 枚举 |