0

我需要将行保存到字符串中

前任:

public function countOccurrences() {

    String Message = "Hello, how are you?"
    String trim = Mensaje.replaceAll(" ", "");


    char[] third = trim.toCharArray();

    for (int counter = 0; counter < third.length; counter++) {

        char ch = third[counter];
        int count = 0;

        for (int i = 0; i < third.length; i++) {

            if (ch == third[i]) {
                count++;
            }
        }


        boolean flag = false;
        for (int j = counter - 1; j >= 0; j--) {
            if (ch == third[j]) {
                flag = true;
            }
        }

        if (!flag) {

            trim = "Letra:" + ch + " se repite " + count + " veces ";
             // trim is a String where I need to store this information
        }


}

预期结果:

  1. 我需要计算字符串中每个字符的出现次数:消息
  2. 将此信息存储在 txt 文件中

前任:

newfile.txt里面有这些信息:

H, 2 times
e, 2 times
l, 2 times
o, 3 times
w, 1 times
a, 1 times
r, 1 times
e, 1 times
y, 1 times
u, 1 times

//

我尝试过有人发布它:

trim = trim + "\n" + ch + ", " + count + " veces \n";

结果在文件中是这样的:(更接近)

你好吗?H, 2 次 e, 2 次 l, 2 次 o, 3 次,, 1 次 w, 1 次 a, 1 次 r, 1 次 y, 1 次 u, 1 次 ?, 1 次

4

3 回答 3

0

问题从这里开始:

    for (int i = 0; i < third.length; i++) {

        if (ch == third[i]) {
            count++;
        }
    }

我可以想到两种解决方案。正确的方法是使用从字符到计数的映射。如果你这样做,你可以用以下内容替换整个 for 循环(不仅仅是上面的摘录部分):

Map letters = new HashMap<Character, Integer>();
for(char c : third) {
  Integer raw_count = letters.get(c);
  int count = raw_count == null ? 0 : raw_count.intValue();
  letters.put(c, count + 1);
}

然后遍历地图并打印出它的值。如果该部分令人困惑,请发表评论。

如果您以前从未听说过地图,那么现在是了解它们的好时机。如果您不能使用地图(家庭作业...),那么我当然不会提供完整的代码示例。但是您可以使用数组来解决它。创建一个 26 元素的 int 数组。然后你可以做类似的事情letters[c - 'a']++。花点时间来消化一下——我们说数组中的第一个元素是as 的计数,第二个是bs 的数量,等等。最初这些都是 0。然后我们取我们正在查看的字符( c),从中减去,使其在0and之间25(不是 97 和 122),然后在那里增加总数。

于 2012-07-03T02:07:08.513 回答
0

番石榴方式:

Multiset<String> count = HashMultiset.create(Lists.charactersOf(message.replaceAll(" ", ""));
Files.write(Joiner.on("\n").join(Iterables.transform(count.entrySet(),
    new Function<Entry<String>, String>() {
        @Override public String apply(Entry<String> entry) {
            return String.format("%s, %d times", entry.getElement(), entry.getCount());
        }
    }, new File("whatever.txt"), Charsets.UTF_8);

或者其他的东西。

于 2012-07-03T02:17:43.450 回答
0
public function countOccurrences() {

String Message = "Hello, how are you?"
String trim = Mensaje.replaceAll(" ", "");


char[] third = trim.toCharArray();

for (int counter = 0; counter < third.length; counter++) {

    if (ch == ',') {
        continue;
    }

    char ch = third[counter];
    int count = 0;

    for (int i = 0; i < third.length; i++) {

        if (ch == third[i]) {
            count++;
        }
    }


    boolean flag = false;
    for (int j = counter - 1; j >= 0; j--) {
        if (ch == third[j]) {
            flag = true;
        }
    }

    if (!flag) {

        trim = "Letra:" + ch + " se repite " + count + " veces ";
         // trim is a String where I need to store this information
    }

}

于 2012-07-03T02:21:23.060 回答