如何避免三次使用相同的方法,这种情况下的最佳做法是什么?或者这是正确的方式吗?
我先检查清单是不是空的,然后再次检查清单,确保不是空的,因为不想打印清空清单。
public class RegExpTest_1 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("item1");
list.add("#item2");
list.add("item3");
list.add("&item4");
list.add("item5");
ArrayList<String> list1 = new ArrayList<String>();
list1.add("item1");
list1.add("item2");
list1.add("item3");
list1.add("item4");
list1.add("item5");
if (StringUtils.isNotEmpty(finditem(list)) || StringUtils.isNotEmpty(finditem(list1))){ // calling method
if (StringUtils.isNotEmpty(finditem(list))) { //calling same method
System.out.println("List :\n" + finditem(list)); //calling same method
}
if (StringUtils.isNotEmpty(finditem(list1))) {
System.out.println("List :\n" + finditem(list1));
}
}
} //main
public static String finditem(ArrayList<String> alist){
StringBuilder sb = new StringBuilder();
String re1=".*?"; // Non-greedy match on filler
String re2="(^#|^&)"; // Word 1
Pattern p = Pattern.compile(re1+re2,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
for (String str:alist) {
Matcher m = p.matcher(str);
if (m.find()) {
// System.out.println("found" + m.group(1));
sb.append(str);
sb.append("\n");
} else {
// System.out.print("not found");
}
}
return sb.toString();
}
}
答案 0 :(得分:2)
外部if语句是多余的。只需使用两个内部if语句。
例如
if (StringUtils.isNotEmpty(finditem(list))) { //calling same method
System.out.println("List :\n" + finditem(list)); //calling same method
}
if (StringUtils.isNotEmpty(finditem(list1))) {
System.out.println("List :\n" + finditem(list1));
}
答案 1 :(得分:0)
你可以使用这种结构:
if (StringUtils.isNotEmpty(finditem(list))) {
System.out.println("List :\n" + finditem(list));
}
if (StringUtils.isNotEmpty(finditem(list1))) {
System.out.println("List :\n" + finditem(list1));
}
我认为外部'如果'是多余的。
答案 2 :(得分:0)
如果您正在使用Java 8,那么它实现起来非常简单。有一个优点是你可以修改它并添加尽可能多的列表,只需在Stream.of
中添加它们
finditem
Stream.of(list, list1)
.map(RegExpTest_1::finditem)
.filter(x -> !x.isEmpty())
.forEach(items -> System.out.println("List : \n" + items));
答案 3 :(得分:0)
您的目标是打印非空列表内容,因此更好的方法是更改 finditem 方法并调整调用方法以获得更好的结构和性能。
public class RegExpTest_1 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("item1");
list.add("#item2");
list.add("item3");
list.add("&item4");
list.add("item5");
ArrayList<String> list1 = new ArrayList<String>();
list1.add("item1");
list1.add("item2");
list1.add("item3");
list1.add("item4");
list1.add("item5");
/*
if (StringUtils.isNotEmpty(finditem(list)) || StringUtils.isNotEmpty(finditem(list1))) { // calling method
if (StringUtils.isNotEmpty(finditem(list))) { //calling same method
System.out.println("List :\n" + finditem(list)); //calling same method
}
if (StringUtils.isNotEmpty(finditem(list1))) {
System.out.println("List :\n" + finditem(list1));
}
}
*/
final String s = finditem(list);
if (StringUtils.isNotEmpty(s)) {
System.out.println("List :\n" + s);
}
final String s1 = finditem(list1);
if (StringUtils.isNotEmpty(s1)) {
System.out.println("List :\n" + s1);
}
} //main
public static String finditem(ArrayList<String> alist) {
// Returns empty string directly if alist is null or empty
if (null == alist || 0 == alist.size()) {
return "";
}
StringBuilder sb = new StringBuilder();
String re1 = ".*?"; // Non-greedy match on filler
String re2 = "(^#|^&)"; // Word 1
Pattern p = Pattern.compile(re1 + re2, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
for (String str : alist) {
Matcher m = p.matcher(str);
if (m.find()) {
// System.out.println("found" + m.group(1));
sb.append(str);
sb.append("\n");
} else {
// System.out.print("not found");
}
}
return sb.toString();
}
final static class StringUtils {
// Do your StringUtils.isNotEmpty's do :)
public static boolean isNotEmpty(final String s) {
return (s != null && s.length() > 0);
}
}
}