Он будет читать только одно значение, так как этот код выполняется один раз, и вы не получите письмо, например, если передаете слово.
Вы набираете 'D', и оно будет печататься "-.. ", потому что это один символ, но если вы наберете" HELLO ", он не будет печатать полное слово, потому что вам нужно разделить на символы и печатать его один за другим.
Если вы измените цикл наэто, он будет делать то, что вы хотите:
for (Map.Entry<String , String> entry : map.entrySet()){
for(int i = 0; i<s.length(); i++){
if (entry.getKey().equalsIgnoreCase(String.valueOf(s.charAt(i)))){
System.out.print(entry.getValue() + " ");
}
}
}
Кстати, если вы хотите избежать запуска приложения каждый раз, когда вы можете создать флаг, чтобы продолжать печатать и конвертировать, пока вы не захотите что-то вроде этого:
public static void main(String[] args) {
Map<String, String> map = createAlphabet();
Scanner in = new Scanner(System.in);
String s = in.nextLine();
while(!s.equals(".")){
for (Map.Entry<String , String> entry : map.entrySet()){
for(int i = 0; i<s.length(); i++){
if (entry.getKey().equalsIgnoreCase(String.valueOf(s.charAt(i)))){
System.out.print(entry.getValue() + " ");
}
}
}
System.out.println();
s = in.nextLine();
System.out.println();
}
}
Редактировать
По предложению @Stephen CI изменил код на этот
public static void main(String[] args) {
Map<String, String> map = createAlphabet();
Scanner in = new Scanner(System.in);
String s = in.nextLine().toUpperCase();
while (!s.equals(".")) {
for (int i = 0; i < s.length(); i++) {
System.out.print(map.get((String.valueOf(s.charAt(i))))+ " ");
}
System.out.println();
s = in.nextLine().toUpperCase();
System.out.println();
}
}
Бессмысленно использовать для, когда у вас есть get()
метод