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 1
抽出来方法封装呗
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
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
janus77 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)) { if (!arg.equals("0") && !arg.equals("1")) { throw new Exception("Invalid arg: " + arg); } } ``` |
14
zmxnv123 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
imjamespond 2020-12-30 13:04:41 +08:00 via Android 1
拼起来用正则
|
18
zhuawadao 2020-12-30 13:13:08 +08:00
把这几个变量直接拼成字符串,然后用正则看是否只有 0 或只有 1
|
19
lonelinsky 2020-12-30 13:14:41 +08:00 via Android 1
new 一个 Set, 然后变量全 put 然后检查 Set 的 size 和 content
|
20
yanhh 2020-12-30 13:20:56 +08:00 1
这种都是用二进制掩码来做,楼主应该没写过底层一点的东西,哈哈,可以看看最靠近的 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 2
|
26
hfc 2020-12-30 13:51:18 +08:00 6
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 2
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 1
既然你只是要过 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
枚举
|