Java 如何使用while循环遍历hashmap中的每个项

Java 如何使用while循环遍历hashmap中的每个项,java,loops,hashmap,Java,Loops,Hashmap,我正在创建一段代码来获取一个名为wordFrequencies的hashmap,其中包含一些单词以及它们在给定字符串中出现的次数 为了节省细节,单词需要对齐,所以我尝试创建代码,在单词的开头添加空格,直到它们对齐为止。我是通过比较它们的长度来做到这一点的 我遇到的问题是while循环,因为单词只在for循环中定义,我不确定如何定义它以在while循环中使用,因为有一个“while-each”循环 //循环以确定最长单词的长度 int maxLength=0; for(字符串字:wordFrequ

我正在创建一段代码来获取一个名为wordFrequencies的hashmap,其中包含一些单词以及它们在给定字符串中出现的次数

为了节省细节,单词需要对齐,所以我尝试创建代码,在单词的开头添加空格,直到它们对齐为止。我是通过比较它们的长度来做到这一点的

我遇到的问题是while循环,因为单词只在for循环中定义,我不确定如何定义它以在while循环中使用,因为有一个“while-each”循环

//循环以确定最长单词的长度
int maxLength=0;
for(字符串字:wordFrequencies.keySet()){
if(word.length()>maxLength){
maxLength=word.length();
}
}
//循环将图形/表格中的单词对齐
while(word.length()
您只需再次在集合中循环

在循环中执行此操作的问题:
word=”“+word就是这样。在Java11+上,您可以使用
字符串重复(int count)
来获取空格。在Java8上,您可以在循环中使用
StringBuilder append(stringstr)
来获取空格

此外,您不能编辑HashMap中的键。您可以删除一个条目并添加一个新条目,但最好使用函数来格式化输出的单词

这里有一个例子

public class scratch {
 public static void main(String[] args) {
    int maxLength = 0;
    HashMap<String, Integer> wordFrequencies = new HashMap<>();
    wordFrequencies.put("bla", 0);
    wordFrequencies.put("blaaaa", 0);
    wordFrequencies.put("blaaaaaaaaaaaaaaaa", 0);

    for (String word : wordFrequencies.keySet()) {
        if (word.length() > maxLength) maxLength = word.length();
    }

    for (String word : wordFrequencies.keySet()) {
        System.out.println(addSpace(word, maxLength));
    }

 }

 public static String addSpace(String word, int maxLength) {
    StringBuilder newWord = new StringBuilder();
    for (int i = 0; i < maxLength - word.length(); i++) {
        newWord.append(" ");
    }
    return newWord.append(word).toString();

    // On Java 11+ you can use String repeat(int count)
    //return " ".repeat(maxLength - word.length()) + word;
}

}
公共类刮擦{
公共静态void main(字符串[]args){
int maxLength=0;
HashMap wordFrequencies=新HashMap();
词频。put(“bla”,0);
字频率。put(“blaaaa”,0);
字频率.put(“blaaaaaaaaaaaaaaaa”,0);
for(字符串字:wordFrequencies.keySet()){
如果(word.length()>maxLength)maxLength=word.length();
}
for(字符串字:wordFrequencies.keySet()){
System.out.println(addSpace(word,maxLength));
}
}
公共静态字符串addSpace(字符串字,int maxLength){
StringBuilder newWord=新StringBuilder();
for(int i=0;i
您只需再次在集合中循环

在循环中执行此操作的问题:
word=”“+word就是这样。在Java11+上,您可以使用
字符串重复(int count)
来获取空格。在Java8上,您可以在循环中使用
StringBuilder append(stringstr)
来获取空格

此外,您不能编辑HashMap中的键。您可以删除一个条目并添加一个新条目,但最好使用函数来格式化输出的单词

这里有一个例子

public class scratch {
 public static void main(String[] args) {
    int maxLength = 0;
    HashMap<String, Integer> wordFrequencies = new HashMap<>();
    wordFrequencies.put("bla", 0);
    wordFrequencies.put("blaaaa", 0);
    wordFrequencies.put("blaaaaaaaaaaaaaaaa", 0);

    for (String word : wordFrequencies.keySet()) {
        if (word.length() > maxLength) maxLength = word.length();
    }

    for (String word : wordFrequencies.keySet()) {
        System.out.println(addSpace(word, maxLength));
    }

 }

 public static String addSpace(String word, int maxLength) {
    StringBuilder newWord = new StringBuilder();
    for (int i = 0; i < maxLength - word.length(); i++) {
        newWord.append(" ");
    }
    return newWord.append(word).toString();

    // On Java 11+ you can use String repeat(int count)
    //return " ".repeat(maxLength - word.length()) + word;
}

}
公共类刮擦{
公共静态void main(字符串[]args){
int maxLength=0;
HashMap wordFrequencies=新HashMap();
词频。put(“bla”,0);
字频率。put(“blaaaa”,0);
字频率.put(“blaaaaaaaaaaaaaaaa”,0);
for(字符串字:wordFrequencies.keySet()){
如果(word.length()>maxLength)maxLength=word.length();
}
for(字符串字:wordFrequencies.keySet()){
System.out.println(addSpace(word,maxLength));
}
}
公共静态字符串addSpace(字符串字,int maxLength){
StringBuilder newWord=新StringBuilder();
for(int i=0;i
主要问题:
word
在此范围内不可见-解决方案:您必须迭代一次,才能找到
maxLength
,然后再迭代一次以格式化“键”。此外,我不会修改输入键,而是返回一个“格式化副本”,如下所示:

int maxLength = Integer.MIN_VALUE;
for (String word : wordFrequencies.keySet()){
  if (word.length() > maxLength) {
    maxLength = word.length();
  }
}

// a new set for formatted words:
Set<String> formatted = new Set<>(wordFrequencies.size());
// repeat the above loop:
for (String word : wordFrequencies.keySet()){
    // (unfortunately), You have to nest the loop & spend 1 variable:
    String fWord = word;
    while (fWord.length() < maxLength){
        fWord = " " + fWord;   // string concatenation is considered "badong" (bad & wrong)
    }
    // now "put it in the case":
    formatted.add(fWord);
}

// return formatted;
int maxLength=Integer.MIN\u值;
for(字符串字:wordFrequencies.keySet()){
if(word.length()>maxLength){
maxLength=word.length();
}
}
//新的格式化字集:
Set formatted=新集合(wordFrequencies.size());
//重复上述循环:
for(字符串字:wordFrequencies.keySet()){
//(很遗憾),您必须嵌套循环&花费1变量:
字符串fWord=单词;
while(fWord.length()

String+
更好的方法:

主要问题:
word
在此范围内不可见-解决方案:您必须迭代一次,才能找到
maxLength
,然后再迭代一次以格式化“键”。此外,我不会修改输入键,而是返回一个“格式化副本”,如下所示:

int maxLength = Integer.MIN_VALUE;
for (String word : wordFrequencies.keySet()){
  if (word.length() > maxLength) {
    maxLength = word.length();
  }
}

// a new set for formatted words:
Set<String> formatted = new Set<>(wordFrequencies.size());
// repeat the above loop:
for (String word : wordFrequencies.keySet()){
    // (unfortunately), You have to nest the loop & spend 1 variable:
    String fWord = word;
    while (fWord.length() < maxLength){
        fWord = " " + fWord;   // string concatenation is considered "badong" (bad & wrong)
    }
    // now "put it in the case":
    formatted.add(fWord);
}

// return formatted;
int maxLength=Integer.MIN\u值;
for(字符串字:wordFrequencies.keySet()){
if(word.length()>maxLength){
maxLength=word.length();
}
}
//新的格式化字集:
Set formatted=新集合(wordFrequencies.size());
//重复上述循环:
for(字符串字:wordFrequencies.keySet()){
//(很遗憾),您必须嵌套循环&花费1变量:
字符串fWord=单词;
while(fWord.length()

比字符串+
更好的方法:

@xerx593是的。我需要在单词的开头添加空格,直到与最长单词的长度相同。for循环用于确定