我有以下情况,
String arr[]
作为输入,可以将整数值,null或空作为字符串。
(例如){"230",null,"6",""}
现在,
1。如果arr的前两个条目中出现空字符或空字符串,则无效的方案不会打印任何内容。
2. 如果arr的最后两个条目中存在null或empty,并且前两个条目不为null且不为空,则打印前两个条目。
(例如)如果 arr [] 是{" 2"," 77",null," 5"}输出将 2,77 。
3. 如果arr []中的条目既不是空也不是空,请检查所有条目是否都是数字。如果没有打印任何内容。
现在我的代码就像这样,
simple validation()
{
onlyFirstTwoNotNullOrNotEmpty = false;
if(//Check if first two params are null)
{
//"print nothing" and return
}
else if(check if third **or** fourth param is null)
{
onlyFirstTwoNotNullOrNotEmpty = true; // setting a boolean
}
//Proceed to check empty string
if(//Check if first two params are empty)
{
"print nothing" and return
}
else if(!onlyFirstTwoNotNullOrNotEmpty) //checking if null
{
if(check if third **or** fourth param is empty)
{
onlyFirstTwoNotNullOrNotEmpty = true; // setting a boolean
}
}
//if all values are not null and not empty
//onlyFirstTwoNotNullOrNotEmpty will be still false
String result;
if(onlyFirstTwoNotNullOrNotEmpty )
{
result = checkIfNumeric(0,1); // only first two entries
}
else
{
result = checkIfNumeric(0,arr[arr.length-1]); // for all entries
}
if(!result.equals("success"))
{
return and print nothing
}
if(onlyFirstTwoNotNullOrNotEmpty)
{
print only first two and return;
}
print all entries and return;
}
如何使用更少的if和else循环更好地优化此代码?是否有通过lambda表达式的可能性?
我不想使用第三方API进行null或空字符串检查。
答案 0 :(得分:0)
也许您可以使用switch语句。循环遍历数组的值并使用switch语句而不是if-else。
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html
答案 1 :(得分:0)
你的代码比它需要的更复杂:
如果代码采用自己的方法,则可以在没有else
子句的情况下执行此操作,就像您的代码一样。
在这里,有评论:
private static void simpleValidation(String[] arr) {
// Undefined Rule: If bad input, print nothing
if (arr.length != 4)
return;
// 1: If a null or empty string present in first two entries of arr, it is a invalid scenario print nothing
if (isNullOrEmpty(arr[0]) || isNullOrEmpty(arr[1]))
return;
// 2: If a null or empty is present in last two entries of arr, and first two entries are not null and not empty print first two entries.
if (isNullOrEmpty(arr[2]) || isNullOrEmpty(arr[3])) {
System.out.println(arr[0]);
System.out.println(arr[1]);
return;
}
// 3: If no entry in arr[] is neither null nor empty check if all entries are numeric. If not print nothing.
if (! isNumeric(arr[0]) || ! isNumeric(arr[1]) || ! isNumeric(arr[2]) || ! isNumeric(arr[3]))
return;
// Undefined Rule: Print all values
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
}
private static boolean isNullOrEmpty(String value) {
return (value == null || value.isEmpty());
}
private static boolean isNumeric(String value) {
return value.matches("\\d+");
}
如果您想要else
条款而不是return
条款,例如:因为后面有更多的代码,就是这么简单(使用相同的两个辅助方法):
private static void simpleValidation(String[] arr) {
if (arr.length == 4 && ! isNullOrEmpty(arr[0]) && ! isNullOrEmpty(arr[1]))
if (isNullOrEmpty(arr[2]) || isNullOrEmpty(arr[3]))
System.out.printf("%s%n%s%n", arr[0], arr[1]);
else if (isNumeric(arr[0]) && isNumeric(arr[1]) && isNumeric(arr[2]) && isNumeric(arr[3]))
System.out.printf("%s%n%s%n%s%n%s%n", arr[0], arr[1], arr[2], arr[3]);
}