查找字符串中的字符

时间:2012-02-12 02:01:12

标签: java

我正在做一个编码程序,我应该删除出现两次的字符串中的每个字符。我试图遍历字符串,但它没有奏效。有谁知道如何做到这一点?感谢。

public static String encodeScrambledAlphabet(String str)
{
    String newword = str;
    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    newword += alphabet;

    newword = newword.toUpperCase();

    for (int i = 0, j = newword.length(); i < newword.length() && j >=0; i++,j--)
    {
        char one = newword.charAt(i);
        char two = newword.charAt(j);

        if (one == two)
        {
            newword = newword.replace(one, ' ');
        }



    }

    newword = newword.replaceAll(" ", "");

    return newword;
}

3 个答案:

答案 0 :(得分:2)

假设您只想保留第一次出现的角色,您可以这样做:

boolean seen[65536];
StringBuilder res = new StringBuilder();
str = str.toUpperCase();
for (char c : str.toCharArray()) {
    if (!seen[c]) res.append(c);
    seen[c] = true;
}
return res.toString();

seen数组包含标记,每个字符一个,表示我们已经看过这个字符。如果您的字符都是ASCII,则可以将seen数组缩小为128

答案 1 :(得分:1)

假设删除两次出现的字符,则表示AAABB成为AAA,低于代码应该适合您。

static String removeDuplicate(String s) {
     StringBuilder newString = new StringBuilder();
     for (int i = 0; i < s.length(); i++) {
         String s1 = s.substring(i, i + 1);
         // We need deep copy of original String.
         String s2 = new String(s);
         // Difference in size in two Strings gives you the number of
         // occurences of that character.
         if(s.length() - s2.replaceAll(s1, "").length() != 2)
             newString.append(s1); 
     }
    return newString.toString();
}

这段代码的效率是有争议的:)通过循环计算字符出现次数可能是更好的方法。

答案 2 :(得分:0)

因此,从您显示的代码来看,您似乎没有比较字符串中的每个字符。您正在比较第一个和最后一个,然后是第二个和倒数第二个。例如:

这是你的字符串: THISISTHESTRINGSTRINGABCDEFGHIJKLMNOPQRSTUVWXYZ

首次迭代,您将比较开头的T和结尾的Z. 第二次迭代,您将比较H和Y. 第三:我和X. 等

所以T a开头永远不会与其他角色进行比较。

我认为更好的方法是做一个双循环:

int length = newword.length(); // This way the number of iterations doesn't change

for(i = 0; i < length; i++){
   for(j = 0; j < length; j++){
      if(i!=j){
         if(newword.charAt(i) == newword.charAt(j)){
            newword.replace(newword.charAt(i), ' ');
         }
      }
   }
}

我确信这不是最有效的算法,但它应该完成它。

编辑:在中间添加了一个if语句,以处理i == j case。

再次编辑:这是一个几乎相同的帖子:function to remove duplicate characters in a string