组合列表以创建一个用逗号分隔的单词

时间:2019-11-12 20:08:30

标签: java

我正在尝试弄清楚如何合并某些列表,因此当您输入“ 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);
            }
        }
    }
}

2 个答案:

答案 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);
相关问题