我试图创建一个方法,该方法将搜索包含搜索特定字符串的多个单词的ArrayList。如果String不等于ArrayList中的任何单词,它会将单词添加到列表中,如果单词已经存在于列表中,它将计算单词出现的次数,然后再添加一次,这将代表最后一个String输入。 这是我到目前为止在我的代码中所得到的:
public void leggTilOrd(String ord) {
if (Ord.contains(ord)) {
teller++;
}
if (!Ord.contains(ord)) {
Ord.add(ord);
}
System.out.println(teller);
}
显然,这只会在柜台(柜员)中增加一个号码,所以我试图在列表中所有出现的特定字符串的基础上添加1,这就是我和#39;被卡住了。
编辑:我还应该提到Ord是我之前在代码中创建的ArrayList。 这是完整的代码:
import java.util.Scanner;
import java.io.File;
import java.util.ArrayList;
public class Ordliste {
private ArrayList<String> Ord = new ArrayList<String>();
private int teller = 0;
public void lesBok (String filnavn) throws Exception{
Scanner fil = new Scanner(new File(filnavn));
while(fil.hasNextLine()){
Ord.add(fil.next());
} fil.close();
}
public void leggTilOrd(String ord){
if(Ord.contains(ord)){
teller++;
} if (!Ord.contains(ord)){
Ord.add(ord);
} System.out.println(teller);
}
}
答案 0 :(得分:3)
您是否使用ArrayList
?我建议使用Map<String, Integer>
代替并将特定字符串的出现次数作为值存储在地图中:
if (map.get(ord) != null) {
map.put(ord, map.get(ord) + 1);
}
else {
map.put(ord, 1);
}
答案 1 :(得分:3)
您可以使用Set
跟踪列表中的字符串,而不是这样做Set<String> set = new HashSet<String>();
public void leggTilOrd(String ord) {
if (set.contains(ord) != null) {
teller++;
} else {
Ord.add(ord);
set.add(ord);
}
System.out.println(teller);
}
答案 2 :(得分:0)
仍然不确定您要完成的是什么,每次添加不同的单词时,是否增加teller
?
这是一种简单的方法来做我认为你正在尝试的事情,并且应该让你朝着正确的方向前进。
import java.util.Arrays;
import java.util.List;
public class test
{
static int teller = 0;
static List<String> words = Arrays.asList("dog", "cat", "dog");
public static void main(String[] args)
{
System.out.println(teller);
addAndCount("dog");
System.out.println(teller);
teller = 0;
addAndCount("cat");
System.out.println(teller);
teller = 0;
addAndCount("fish");
System.out.println(teller);
}
public static void addAndCount(String newWord)
{
teller += 1 + Math.toIntExact(
words.stream().filter(string -> newWord.equals(string)).count());
words.add(newWord);
}
}