对字符串中的字符求和并打印最大的字符串(java)

Posted

技术标签:

【中文标题】对字符串中的字符求和并打印最大的字符串(java)【英文标题】:Sum chars from strings & print biggest string (java) 【发布时间】:2019-03-25 17:00:28 【问题描述】:

我被一些有趣的任务困住了。我有 3 个字符串(helloheavyword)。需要计算每个世界的总和并打印最大的世界和总和。用于计算 - a = 1,z = 26。所以 hello = 50,heavy = 61 & word = 60。最大的字符串是“heavy”,我需要像“heavy,61”一样打印它。我找到了从一个字符串计算字符的代码:

String[] words = "hello", "heavy", "word";

String str = "abc";
int sum = 0;

for (char ch : str.toCharArray()) 
    if (ch >= 'a' && ch <= 'z') 
        sum += 1 + ch - 'a';
    

System.out.printf("%s %d%n", str, sum); //the result is abc, 6

这段代码的结果是: abc, 6

问题是,如何计算所有单词以及如何打印最大的单词?我可以为每个单词写总和,然后再计算,但在我的任务中,单词是来自控制台的随机数。 扫描没问题。

编辑:所有单词都是小写字母。

【问题讨论】:

aA的值会一样吗? 您应该创建一个为参数执行此操作的方法。然后循环调用该方法。 所有单词都是小写a-z 提示:小写 a-z 称为小写 Basic Latin 字母。它们具有只需要一个 UTF-16 代码单元进行编码和在 UTF-16 中连续的特性。 Java char 是一个 UTF-16 代码单元。 (这使您的映射变得简单1 + ch - 'a'。)UTF-16 是Unicode 字符集的几种字符编码之一。 【参考方案1】:

你可以这样做:

String[] words =  "hello", "heavy", "word" ;

int biggestSum = 0;
String biggestWord = null;

for (String word : words) 
    int sum = 0;

    for (char ch : word.toLowerCase().toCharArray()) 
        if (ch >= 'a' && ch <= 'z') 
            sum += 1 + ch - 'a';
        
    

    if (sum > biggestSum) 
        biggestSum = sum;
        biggestWord = word;
    

    System.out.printf("%s %d%n", word, sum);


System.out.printf("Biggest word: %s %d%n", biggestWord, biggestSum);

这里我们遍历words 中的每个单词,并记录每个单词的sum。在计算出sum 之后,我们可以检查当前wordsum 是否大于目前发现的最大单词,如果是这样,我们将覆盖biggestWord

【讨论】:

谢谢。这是完成任务的非常简单和简短的方法。我将阅读更多关于“for (String word : words) ” for (String word : words) 是一个更简单、更紧密的循环概念。更容易在问题域中写入、读取和转换。像这样表达它:“for each word in words”。【参考方案2】:

对于每个单词,计算单词总和,并更新一个包含最大总和的变量。例如:

int largestSum;
for (int i = 0; i < arrayOfWords.Length (); i++)

    // calculate the sum of the current word
    int currentWordSum = 0; 
    for (int j = 0; j < arrayOfWords[i].Length ();j++)
    
        currentWordSum += (int)(arrayOfWords[j]);
        if (currentWordSum > largestSum)
        
            largestSum = currentWordSum;
        
    

System.out.println (largestSum);

【讨论】:

谢谢,这是一种有用的计算方法。【参考方案3】:

您可以使用Map&lt;String, Integer&gt; 轻松实现它,其中键是String,值是权重

public static void main(String[] args) 
    String[] words =  "hello", "heavy", "word" ;
    Map<String, Integer> hmap = new HashMap<String, Integer>();

    for (int i = 0; i < words.length; i++) 
        hmap.put(words[i], 0);
    

    hmap.forEach((k, v) -> 
        int tot = 0;
        for (char c : k.toCharArray()) 
            tot = tot + (c - 'a' + 1);
        
        hmap.put(k, tot);
    );
 

现在您可以遍历此地图以找到 最重 字符串。

编辑:

不使用地图:

    String highString= "";
    int highest = 0;
    for (int i = 0; i < words.length; i++) 
        int tot = 0;
        for (char c : words[i].toCharArray()) 
            tot = tot + (c - 'a' + 1);
            if (highest < tot) 
                highest = tot;
                highString = words[i];
            
        
    
    System.out.println(highString + "," + highest);

【讨论】:

我们真的不需要地图。我们可以使用单次迭代来保存当前最大单词及其分数。如果新词更大,只需替换 max。 同意。添加了另一种选择。 感谢您的选择。在我开始的课程中还没有学习过HashMaps,但是这个例子是自学的好方法:)

以上是关于对字符串中的字符求和并打印最大的字符串(java)的主要内容,如果未能解决你的问题,请参考以下文章

java计算出字符串中所有的数字求和?

本程序找出字符串数组 String[] arr = {“welcome”, “china”, “hi”, “congratulation”, “great”} 中的长度最大的元素,并打印输出。

Java中从键盘中任意输入字符串,将其转换成数字后,并求和

Offer[17] 打印1到最大的n位数

java 提出字符串中的数字并相加

如何在将连字符作为值之一的同时对字符串数据类型中的键的列表中的值求和