初学者编码器。所以我有这段代码:
public String doOperation(String s1, String s2) {
if(s2.compareTo("") == 0) return s1;
else return s2;
}
只是粗略的草稿,但基本上我说要返回s2,除非它是一个空字符串,然后返回s1。 如果没有if语句,我有什么方法可以做到这一点吗?对于赋值,我不应该使用if语句,switch语句,while循环,异常处理,或者几乎任何其他只是偷偷摸摸的方式来绕过" if"声明。
我试图通过多态来找到一种方法,但我也不想创造大量新事物来完成这项微小的任务。任何想法/帮助?谢谢!
答案 0 :(得分:3)
您可以使用三元运算符:
return s2.isEmpty() ? s1 : s2;
答案 1 :(得分:2)
看起来像一个脑筋急转弯..这是可怕的代码,但应该做你想要的...
return s1.substring(Math.min(s1.length()-1, s1.length() * s2.length()) + s2
所以,如果s2的长度为0,你将从位置0开始打印s1,然后打印s2,这是空的
如果s2的长度不为0,你将从最后一个位置开始打印s1(即什么都没有),然后是s2
哦,小伙子,我现在觉得很脏:)。
答案 2 :(得分:1)
它被称为Ternary operation,超级有用
public String doOperation(String s1, String s2) {
return s2.compareTo("") == 0 ? s1 : s2;
}
答案 3 :(得分:1)
由于其他人都已经覆盖了三元(或条件运算符? :
),您也可以使用switch
之类的
public String doOperation(String s1, String s2) {
switch (s2.length()) {
case 0: return s1;
}
return s2;
}
答案 4 :(得分:1)
您应始终确保首先处理空方案和异常处理。
public String doOperation(String s1, String s2) {
if (s2 == null) {
System.out.println("Error Msg: null value");
throw new NullPointerException();
}
return s2.isEmpty() ? s1 : s2;
}
更新1:对于此特定情况,使用s2.isEmpty()
与s2.equals("")
或s2.length() == 0
或s2.compareTo("") == 0
答案 5 :(得分:1)
public String doOperation(String s1, String s2) {
int mask = 1 / (1 + s2.length());
return s1.substring(0, s1.length() * mask) + s2);
}
对于因0
而导致的任何非空String
的掩码,integer
将为1
,String
为空1 / 1 = 1
,0
在第二行,s2
掩码将“无效”'子字符串的长度,将其留空,并且附加的1
是唯一返回的内容。
另一方面,s1.length()
掩码不会更改s2
的值,并且附加的1
无论如何都是空的(因为我们得到了s1
掩码),所以从头到尾唯一返回的是CREATE PROCEDURE myProc
@EmpId NVARCHAR(50) = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = N' SELECT * FROM Table_Name WHERE 1 = 1'
+ CASE WHEN @EmpId IS NOT NULL THEN
N' AND empId IN ( SELECT Split.a.value(''.'', ''VARCHAR(100)'') empId
FROM (
SELECT Cast (''<X>''
+ Replace(@EmpId, '','', ''</X><X>'')
+ ''</X>'' AS XML) AS Data
) AS t CROSS APPLY Data.nodes (''/X'') AS Split(a)
) ' ELSE N'' END
Exec sp_executesql @Sql
,N'@EmpId NVARCHAR(50)'
,@EmpId
END
。