在Scala中编写一个程序,该程序从键盘读取String并计算字符数,而忽略它的UpperCase或LowerCase 例如:鳄梨 R:A = 2; v = 1; o = 2; c = 1; d = 2;
因此,我尝试用两个fors遍历字符串,然后有条件地将位置(x)处的字符转换为Upper并与位置相同(y)处的字符进行比较...基本上,我正在转换相同的字符,因此我可以在计数器中递增,例如:Ava-> A = 2; v = 1;
但是按照这种逻辑,当我打印结果时会附带: 例如:鳄梨 R:A = 2; v = 1; o = 2; c = 1; a = 2; d = 1; o = 2; 它在结果中重复相同的字符Upper或Lower ... 所以我的老师要求我们使用split方法和Scala的收益来解决这个问题,但是我不知道如何在没有forEach()且他不允许我们使用的情况下使用split。
抱歉英语不好
object ex8 {
def main(args: Array[String]): Unit = {
println("Write a string")
var string = readLine()
var cont = 0
for (x <- 0 to string.length - 1) {
for (y <- 0 to string.length - 1) {
if (string.charAt(x).toUpper == string.charAt(y).toUpper)
cont += 1
}
print(string.charAt(x) + " = " + cont + "; ")
cont = 0
}
}
}
但是按照这种逻辑,当我打印结果时会附带: 例如:鳄梨 R:A = 2; V = 1; o = 2; c = 1; a = 2; d = 1; o = 2;
答案 0 :(得分:4)
Scala 2.13添加了一种非常方便的方法来解决此类问题。
inputStr.groupMapReduce(_.toUpper)(_ => 1)(_+_)
.foreach{case (k,v) => println(s"$k = $v")}
//A = 2
//V = 1
//C = 1
//O = 2
//D = 1
答案 1 :(得分:3)
将string.IsNullOrWhiteSpace(variable2?.SubItem?.Value2)
的各个元素(即String
的集合,用Char
区分大小写)进行分组,以汇总其相应的{{1} }使用toLower
:
size
答案 2 :(得分:2)
Scala 2.11
尝试了经典的map => group => reduce单词计数方法
from pathlib import Path
loc = r'C:\Users\acer\Documents\Tesis'
# this will find all the .nc files in the directory
files = Path(loc).glob('*.nc')
# A loop will allow you to access each file
for file in files:
print(file)
答案:
val exampleStr = "Avocado R"
exampleStr.
toLowerCase.
trim.
replaceAll(" +","").
toCharArray.map(x => (x,1)).groupBy(_._1).
map(x => (x._1,x._2.length))