我正在使用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;
}
2条答案
按热度按时间n3h0vuf21#
这将:
创建一个新变量,名为
keywords
,可以指向数组列表。创建新的arraylist对象。
将对新创建对象的引用指定给
keywords
变量。然后丢弃该引用并使所创建的对象成为即时垃圾,然后立即为其分配其他引用。
换句话说
new ArrayList<String>();
只会浪费时间和空间。把它扔掉。让我们也像其他java程序员一样,使用我们感兴趣的最通用的类型。对于初学者来说,这基本上意味着“变量应该是List
,不是ArrayList
. 以与其他java程序员类似的风格编写代码是很好的;使他们更容易阅读代码,也使他们更容易阅读您的代码。你只得到一个关键字,你称之为
list
? 名字很重要。当他们撒谎时,你的代码就变得不可读了。将字符串列表转换为一个包含所有值的字符串,并用逗号分隔。听起来像是一份普通的工作。当某件事听起来很平常时,就上网搜索。你通常会发现只有一行。就在这里:
噢,代码太少了。
这个
keywordChecker
方法它有助于记录代码,特别是在请求帮助时。显然,这种方法是扫描所提供的
title
变量,并搜索任意一个关键字列表,则返回每个匹配关键字。但是,您最多只能返回3个。我猜你不想那样。但如果你这样做了,我会告诉你怎么做,当然是一行。当你开始这样命名变量时,停止。这不可能是对的。想一想。你已经在使用它们了,你知道如何正确地做到这一点:列表。一旦你使用了一个列表,这就变得微不足道了。另外,方法名通常应该是动词;普通java风格。让我们也做常数,嗯,常数。我们也要避免数组,它们既笨重又烦人。
那就省去了一大堆台词,太好了。如果你想返回最多不超过3个关键字。。。所有你需要做的是中止循环时,你'满'。作为for循环中的最后一行:
综合起来:
whhtz7ly2#
您可以尝试在一个for循环中完成所有操作。另外,我建议您使用hashset,因为您正在比较元素。hashset不能包含重复的元素,因此如果您尝试添加一个已经存在的元素,它不会这样做,并且返回false(是的,hashset中的add函数返回一个布尔值)。