如果给我一个字符串的ArrayList,即{"hello", "goodbye", "morning", "night"}
,我该如何检查a
,b
,c
等的数量,等等。列表中有?
该方法必须返回int
s的数组,其中position [0]是a
的数字等。例如,returnArray[1] = 1
,因为有一个b
列表中的public static int[] getLetters( ArrayList<String> list) {
int [] result = new int[25];
if(list.contains('a')) {
result[0] = result[0] + 1;
}
return result;
}
。有没有比仅仅硬编码每个字母更好的方法呢?
public class Something
{
private Time cls = new Time();
public Something(int companyId)
{
cls.LoadSettings1(companyId);
}
public void CallMethod1()
{
cls.Method1();
}
}
有没有比再重复上述策略25次更好的方法?
答案 0 :(得分:8)
您可以使用char
作为解决数组的方法,例如......
ArrayList<String> list = new ArrayList<>(Arrays.asList(new String[]{"hello", "goodbye", "morning", "night"}));
int[] results = new int[26];
for (String value : list) {
for (char c : value.toCharArray()) {
// 'a' is the lowest range (0), but the ascii for 'a' is 97
results[c - 'a'] += 1;
}
}
导致......
[0, 1, 0, 1, 2, 0, 3, 2, 2, 0, 0, 2, 1, 3, 4, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0]
nb:这只适用于小写字符,如果你有任何大写字符,你将得到一个数组越界错误。您可以为每个字符添加范围检查,以确保它在a
和z
之间,但这取决于您
答案 1 :(得分:0)
Yo可以将您的数组转换为CharArray(),然后您可以将每个字母与您想要的字母进行比较。
答案 2 :(得分:0)
您可以依赖map
和Character
课程,如下所示:
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
class C {
public static void main(String[] args) {
String w1 = "samefoo";
String w2 = "barsame";
ArrayList<String> al = new ArrayList<String>();
al.add(w1);
al.add(w2);
// this is your method --->
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for(String str: al) {
for(int i = 0; i < str.length(); ++i) {
char k = str.charAt(i);
if(map.containsKey(k)) {
map.put(k, map.get(k) + 1);
} else {
map.put(k, 1);
}
}
}
// <---
for(char c: map.keySet()) {
System.out.println(c + ":" + map.get(c));
}
}
}
显然,不在地图中的所有人都隐含地将0作为计数器。
答案 3 :(得分:0)
使用java 8,你可以这样做:
List<String> list = new ArrayList<>(Arrays.asList("hello", "goodbye", "morning", "night"));
Map<String, Long> map = list.stream()
.flatMap(word -> Arrays.stream(word.split("")))
.collect(Collectors.groupingBy(
letter -> letter,
Collectors.counting()));
System.out.println(map); // {r=1, b=1, t=1, d=1, e=2, g=3, h=2, i=2,
// y=1, l=2, m=1, n=3, o=4}
从这张地图构建所需的数组留作读者的练习;)