我正在尝试弄清楚如何合并某些列表,因此当您输入“ BAD”或“ Bad”时,它会占用B,A和D并将它们打印在一行文本中。
import java.util.*;
public class Map4_for {
public static void main(String[] args) {
boolean repeat = (false);
while(!repeat){
Scanner in = new Scanner(System.in);
String name = in.next();
List <String> listClone = new ArrayList<String>();
if(name.startsWith("A")|| name.equalsIgnoreCase("A")){
listClone.add("Alpha");
System.out.println(listClone);
}
else if(name.startsWith("B")|| name.equalsIgnoreCase("B")){
listClone.add("Bravo");
System.out.println(listClone);
}
else if(name.startsWith("C")|| name.equalsIgnoreCase("C")){
listClone.add("Charlie");
System.out.println(listClone);
}
else if(name.startsWith("D")|| name.equalsIgnoreCase("D")){
listClone.add("Delta");
System.out.println(listClone);
}
else if(name.startsWith("E")|| name.equalsIgnoreCase("E")){
listClone.add("Echo");
System.out.println(listClone);
}
else if(name.startsWith("F")|| name.equalsIgnoreCase("F")){
listClone.add("Foxtrot");
System.out.println(listClone);
}
}
}
}
答案 0 :(得分:0)
如果我正确理解了您想从标准输入中读取一个单词,然后将其放入列表中,然后将该单词拆分为单个字母,然后在屏幕上用字母之间的逗号将它们打印出来?可以通过短循环遍历单词中的每个字母并在其后用逗号打印它们,除非它是最后一个字母。
我还猜测您要在程序执行期间保留一个列表,而不打算每次都创建一个新列表。然后,您希望将列表初始化移到while循环之外。另外,我认为没有理由在每次循环迭代时创建一个新的Scanner对象,因此也许您也希望将其移到while循环之外。希望这可以帮助。
答案 1 :(得分:0)
首先,将Scanner
初始化移出循环。其次,创建一个HashMap
的所有字母及其相应的流行文化军事发音(例如map.put("A", "Alpha")
和map.put("a", "Alpha")
),如下所示:
HashMap<String, String> militaryJargonMap = new HashMap<>() {{
put("A", "Alpha");put("B", "Beta");put("C", "Charlie");put("D", "Delta");
put("a", "Alpha");put("b", "Beta");put("c", "Charlie");put("d", "Delta");
}};
现在使用regex (?!^)
将输入的单词分成连续的字母。
然后遍历拆分后获得的数组中的每个元素,然后检查字母是否为HashMap
中的键。如果存在,则将相应的值放入List
中。
使用Streams
会变成这样:
Stream.of(str.split("(?!^)"))
.map(s -> militaryJargonMap.getOrDefault(s, s))
.collect(Collectors.toList())
.forEach(System.out::println);