![](/img/trans.png)
[英]What 's the cleaner way to declare a list of error codes in java spring
[英]What's a cleaner way to write this Java code or optimize it to build a string from an ArrayList?
我正在使用 selenium 創建一個 java 抓取程序並將數據插入數據庫。 我正在積極尋求提高我的技能,但由於我失去了興趣,我覺得教學視頻沒有太大幫助,但我真的很喜歡邊做邊學。 下面的代碼可以根據需要工作,但它看起來真的很難看,我覺得必須有更好/更清潔的解決方案。 作為參考,它根據關鍵字計數構建一個逗號分隔的字符串,其中包含“Value1”或“Value1,Value2”等數據。 我最初的邏輯是輸出“,Value1,Value2”,這就是我添加“if(x ==0)”邏輯的原因。 我有很多像這樣草率的方法,所以任何改進我的代碼的指針都非常感謝,謝謝!
ArrayList<String> keywords = new ArrayList<String>();
keywords = keywordChecker(title);
for (int x = 0; x < keywords.size(); x++) {
String list = keywords.get(x);
if (x == 0) {
keywordListBuilder = list;
} else if (x > 0) {
keywordListBuilder = keywordListBuilder + ", " + list;
}
}
keywordValues.add(keywordListBuilder);
public ArrayList<String> keywordChecker(String title) {
ArrayList<String> keywordList = new ArrayList<String>();
String keyword1 = "";
String keyword2 = "";
String keyword3 = "";
String[] keywordTextCombinations = { "Value1", "Value2", "Value3", [imagine a list of 20 items]};
for (int i = 0; i < keywordTextCombinations.length; i++) {
if (title.toLowerCase().contains(keywordTextCombinations[i].toLowerCase())) {
keyword1 = keywordTextCombinations[i];
keywordList.add(keyword1);
break;
}
}
for (int i = 0; i < keywordTextCombinations.length; i++) {
if (title.toLowerCase().contains(keywordTextCombinations[i].toLowerCase())
&& !keywordTextCombinations[i].toLowerCase().equals(keyword1.toLowerCase())
&& !keywordTextCombinations[i].toLowerCase().equals(keyword2.toLowerCase())) {
keyword2 = keywordTextCombinations[i];
keywordList.add(keyword2);
break;
}
}
for (int i = 0; i < keywordTextCombinations.length; i++) {
if (title.toLowerCase().contains(keywordTextCombinations[i].toLowerCase())
&& !keywordTextCombinations[i].toLowerCase().equals(keyword1.toLowerCase())
&& !keywordTextCombinations[i].toLowerCase().equals(keyword2.toLowerCase())) {
keyword3 = keywordTextCombinations[i];
keywordList.add(keyword3);
break;
}
}
return keywordList;
}
ArrayList<String> keywords = new ArrayList<String>(); keywords = keywordChecker(title);
這將:
keywords
的新變量,它可以指向數組列表。keywords
變量。 換句話說,那個new ArrayList<String>();
除了浪費時間和空間,什么都不做。 擺脫它。 我們也像其他 java 編碼器一樣,使用我們感興趣的最通用類型。對於初學者來說,這基本上意味着,'變量應該是List
類型,而不是ArrayList
類型。 編寫與其他 java 編碼器類似的代碼是很好的; 讓他們更容易閱讀他們的代碼,也讓他們更容易閱讀你的代碼。
List<String> keywords = keywordChecker(title);
for (int x = 0; x < keywords.size(); x++) { String list = keywords.get(x); if (x == 0) { keywordListBuilder = list; } else if (x > 0) { keywordListBuilder = keywordListBuilder + ", " + list; } } keywordValues.add(keywordListBuilder);
你得到一個關鍵字,你稱之為這個list
? 名字很重要。 當他們撒謊時,你的代碼就會變得不可讀。
您正在將字符串列表轉換為包含所有值的單個字符串,並用逗號分隔。 這聽起來像是一份普通的工作。 當某些事情聽起來很常見時,請搜索 web。 你通常會發現有一個單行。 所以它在這里:
keywordValues.add(String.join(", ", keywords));
哦,那是更少的代碼。
keywordChecker
方法
它有助於記錄代碼,尤其是在尋求幫助時。 顯然,這個方法是掃描提供的title
變量,並搜索任何一個關鍵字列表,然后返回每個匹配的關鍵字。 但是,您最多只能返回 3 個。我想您不希望這樣。 但如果你這樣做,我會告訴你怎么做,當然是單線。
String keyword1 = ""; String keyword2 = ""; String keyword3 = "";
當你開始像這樣命名變量時,停止。 沒有辦法是正確的。 想一想。 你已經在使用它們,你知道如何正確地做到這一點: Lists 。 一旦你使用了一個列表,這幾乎是微不足道的。 此外,方法名稱通常應該是動詞; 常見的 java 樣式。 讓我們也使常數,好吧,常數。 讓我們也避免使用 arrays,它們既笨重又煩人。
private static final List<String> KEYWORDS = List.of("Value1", "Value2", "Value3", [imagine a list of 20 items]);
public List<String> findMatchingKeywords(String title) {
var out = new ArrayList<String>();
String lowercased = title.toLowerCase();
for (String keyword : KEYWORDS) {
if (lowercased.contains(keyword.toLowerCase()) out.add(keyword);
}
return out;
}
這消除了很多行,這很好。 如果您想最多返回不超過 3 個關鍵字……您需要做的就是在“滿”時中止循環。 作為 for 循環中的最后一行:
if (out.length() == 3) break;
把它們放在一起:
keywordValues.add(String.join(", ", findMatchingKeywords(title)));
...
private static final List<String> KEYWORDS = List.of("Value1", "Value2", "Value3", [imagine a list of 20 items]);
public List<String> findMatchingKeywords(String title) {
var out = new ArrayList<String>();
String lowercased = title.toLowerCase();
for (String keyword : KEYWORDS) {
if (lowercased.contains(keyword.toLowerCase()) {
out.add(keyword);
if (out.length() == 3) break;
}
}
return out;
}
您可以嘗試在一個 for 循環中完成所有操作。 另外,我建議您使用 HashSet,因為您正在比較元素。 HashSet 不能包含重復的元素,因此如果您嘗試添加一個已經存在的元素,它不會這樣做並返回 false(是的,在 HashSet 中添加 function 返回一個布爾值)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.