在字符串中查找重复的字符

时间:2013-08-17 13:25:13

标签: java string character repeat

问题陈述如下:给定一个字符串和用户的字符,找到字符(由用户给出)在字符串中重复的次数(也由用户给出)。

我有这段代码

public int repeticion (int s){
        int return = 0;
        int cont = 0;
        Scanner in = new Scanner(System.in);
        System.out.println("Write a string: ");
        String chain = in.next();
        System.out.println("Write the character: ");
        String character = in.next();
        if (chain.contains(character)) {
            cont = cont + 1;
        }
        System.out.println("The character repeats itself "+cont+"times");
        return return;

但是你可以看到.contains只计算一次字符,而不是它在字符串中出现的次数。

6 个答案:

答案 0 :(得分:4)

.contains()只表示字符串中存在一个字符,而不是多少字符。您需要迭代字符串的每个字符以检查它是否等于您要搜索的字符。

String chain = "your string";
int cont = 0;
for(int i=0; i<chain.length(); i++) {
   if(chain.charAt(i) == character) {
      cont++;
   } 
}

答案 1 :(得分:1)

您还可以反复检查字符是否在字符串中,获取该索引,然后检查该索引后的子字符串到字符串的结尾。我推荐以下内容:

int index = 0;
int count = 0;
while (chain.indexof(character, index) != -1  && index < chain.length()-1) {
    index = chain.indexof(character, index) + 1;
    count++;
}

答案 2 :(得分:0)

包含只会告诉您角色是否存在。要实际计算字符出现的次数,您需要迭代字符串并计算所选字符出现的次数。这种方法可行:

public countACharacter(char thecharacter, String stringtocountcharactersin) {
    int count = 0;
    for(int i = 0; i < stringtocountcharactersin.length(); i++) {
        if(stringtocountcharactersin.charAt(i) == thecharacter) {
            count++;
        }
    }
    return count;
}

答案 3 :(得分:0)

//使用字符串方法。 public static void main(String [] args){

    String ss="rajesh kumar";

    Field value = null;
    try {
        value = String.class.getDeclaredField("value");
    } catch (NoSuchFieldException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    // It's private so we need to explicitly make it accessible.

    value.setAccessible(true);

    try {
        char[] values = (char[])value.get(ss);

        //String is converted to char array with out string functions

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

            int count=0;
            for(int j=0;j<values.length;j++)
            {
                if(values[i]== values[j])
                {
                    count++;
                }
            }
            System.out.println("\n Count of :"+values[i] +"="+count);

        }

        System.out.println("Values "+values[1]);
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}

答案 4 :(得分:0)

import java.io.*;

public class Duplicate {

    public static void main(String[] args) throws IOException {
        int distinct = 0;
        int i = 0, j = 0;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter STRING : -");
        String s = br.readLine();
        try {
            for (i = 0; i < s.length(); i++) {
                while (s != null) {
                    s = s.trim();
                    for (j = 0; j < s.length(); j++) {
                        if (s.charAt(i) == s.charAt(j)) {
                            distinct++;
                        }
                    }
                    System.out.println(s.charAt(i) + "--" + distinct);
                    String d = String.valueOf(s.charAt(i));
                    s = s.replaceAll(d, " ");
                    distinct = 0;
                }
            }
        } catch (Exception e) {}
    }
}

答案 5 :(得分:0)

public static void chars( String a, char k)
       {
           String z=""+k;
           int s=0;
           for(int i=0;i<a.length();i++)

           {

               if(z.equals(a.substring(i,i+1)))
                   s++;

                                            }

           System.out.println(s);
       }

您可以通过这种方式实现您的目标,而无需任何原因即可使用整数s,而您做错的是您使用的是.contains()方法,而不是将给定的char与每个char进行比较。字符串并使用计数器来保持字符的次数,也可以通过将char与一个空string(“”)连接起来将char转换为字符串,然后使用.equals方法(如我在代码。