我目前正在编写一种算法,该算法需要用户输入,识别整个字符串中的每个字母,然后将每个字母打印出来,并打印出它旁边该字符串中出现的次数。当前,该算法遍历字符串并执行所需的操作,但并未如底部示例中所示将字母分组在一起。
我坚持要解决这个问题,希望能提供一些建议。我是Java的中级专家,因此选择不与Arrays混为一谈。
PS它旨在排除空格。
//Algorithm
String newS2 = "";
String storage = "";
int repeated = 0;
for(int i = 0; i<userS.length(); i++){
if(!userS.substring(i, i + 1).equals(" ") && !(userS.substring(i, i + 1).equals(storage.substring(0)))){
for(int j = 0; j<userS.length(); j++){
if(userS.substring(j, j + 1).equals(userS.substring(i, i + 1))){
storage += userS.charAt(j);
}
}
repeated = storage.length();
newS2 += storage.charAt(0) + String.valueOf(repeated);
repeated = 0;
storage = "";
}
}
userS是一个预先初始化的String变量,该变量设置为用户通过Scanner
变量输入的内容。
目前,如果我输入“此消息”,则会得到:t1h1i1s3m1e2s3s3a1g1e2
当我真正想要得到时:t1h1i1s3m1e2g1
您不必跟踪源字符串中已经出现的字母,因此新字符串中所有额外的内容是每个字符的额外出现次数以及该字符出现在字符串其余部分中的总次数。
您需要进行其他检查,以查看是否已经遇到过一封信。尝试使用String.contains()
排除重复字符。逻辑是:如果新字符串尚未包含此字符,则应添加该字符。否则,什么都不做。
if(!newS.contains(storage.substring(0, 1))
{
storagestorage += userS.charAt(j);
}
但是,您确实应该使用某种数据结构。Java具有数据结构是有原因的。尝试使用HashMap,其中单个字符串为键,重复次数为值,您将获得一段紧凑的代码,该代码非常容易理解。现在,您的方法有点不直观,因为您是在storage
逐个字符地建立字符,并根据该字符被存储的次数得出重复次数,而不是简单地增加计数器。
HashMap<String, Integer> myMap = new HashMap<>();
for(int count = 0; count < userS.length(); count++)
{
String sub = userS.subString(count, count + 1);
if(myMap.containsKey(sub))
{
// this char is already in the map
myMap.replace(sub, new Integer(myMap.get(sub) + 1));
}
else
{
myMap.put(sub, new Integer(1));
}
}
我认为是对的,请原谅我在手机上打错字。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句