对字符串中的字符求和并打印最大的字符串(java)
Posted
技术标签:
【中文标题】对字符串中的字符求和并打印最大的字符串(java)【英文标题】:Sum chars from strings & print biggest string (java) 【发布时间】:2019-03-25 17:00:28 【问题描述】:我被一些有趣的任务困住了。我有 3 个字符串(hello、heavy 和 word)。需要计算每个世界的总和并打印最大的世界和总和。用于计算 - 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
问题是,如何计算所有单词以及如何打印最大的单词?我可以为每个单词写总和,然后再计算,但在我的任务中,单词是来自控制台的随机数。 扫描没问题。
编辑:所有单词都是小写字母。
【问题讨论】:
a
和A
的值会一样吗?
您应该创建一个为参数执行此操作的方法。然后循环调用该方法。
所有单词都是小写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
之后,我们可以检查当前word
的sum
是否大于目前发现的最大单词,如果是这样,我们将覆盖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<String, Integer>
轻松实现它,其中键是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)的主要内容,如果未能解决你的问题,请参考以下文章
本程序找出字符串数组 String[] arr = {“welcome”, “china”, “hi”, “congratulation”, “great”} 中的长度最大的元素,并打印输出。