一个字符串中的相同字符

时间:2013-09-06 06:55:40

标签: java string types char

我需要知道一个字符串中有多少个相同类型的字符。

我试过这个

String x ="(3+3)*(4-2)";
int a = x.indexOf( "(" );

但那只给我第一个索引

9 个答案:

答案 0 :(得分:1)

您可以使用循环并使用其他方法indexOf(int, int)

String x ="(3+3)*(4-2)";
int a = x.indexOf( "(" );

while (a >= 0) {
    System.out.println("Char '(' found at: "+a);
    a = x.indexOf('(', a+1);
}

答案 1 :(得分:0)

使用StringUtils.countMatches

StringUtils.countMatches(value,"(");

public static int countMatches(String value, String valueToCount) {
          if (value.isEmpty() || valueToCount.isEmpty()) {
                return 0;
            }
            int count = 0;
            int index = 0;
            while ((index = value.indexOf(valueToCount, index)) !=  -1) {
                count++;
                index += valueToCount.length();
            }
            return count;
        }

答案 2 :(得分:0)

我可以想到这样做的一些方法,但最简单的方法之一就是简单地循环String中的直通字符....

String x ="(3+3)*(4-2)";
int count = 0;
for (char c : x.toCharArray()) {
    if (c == '(') {
        count++;
    }
}
System.out.println(count);

只是因为它可以完成......你可以使用一点regexp ......(我知道,矫枉过正)

Pattern p = Pattern.compile("\\(");
Matcher matcher = p.matcher(x);
while (matcher.find()) {
    count++;
}
System.out.println(count);

答案 3 :(得分:0)

这样的事情对你有用:

int getCountOfSubstring(String haystack, String needle) {
    int count = 0;
    while(haystack.indexOf(needle) != -1) {
        count++;
        haystack = haystack.substring(tmp.indexOf(needle);
    }
    return count;
}

如果您只是单独寻找一个角色,那么首先将干草堆首先减少为charArray并在其上循环的方法可能更为可取。

答案 4 :(得分:0)

将它放在一个单独的函数中似乎更好:

// accepts a string and a char to find the number of occurrences of
public static int get_count(String s, char c) {    

    int count = 0;                        // count initially 0

    for (int i = 0; i < s.length(); i++)  // loop through the whole string
        if (s.charAt(i) == c)
            count ++;                     // increment every time an occurrence happens

    return count;                         // return the count in the end

}

您可以这样称呼它:

System.out.println(get_count("(3+3)*(4-2)", '('));

// Output: 2

答案 5 :(得分:0)

以下代码可以满足您的需求。如果性能至关重要,您可以使用它进行优化。如果你想要更优雅的解决方案,你可以看一下java的正则表达式。

int occurences = 0;
String x ="(3+3)*(4-2)";
char tolookfor = '(';
for(int i = 0; i < x.length() ; i++)
{
    if(x.charAt(i) == tolookfor)
        occurences++;
}

答案 6 :(得分:0)

你可以试试这个

    String x ="(3+3)*(4-2)";
    char[] arr=x.toCharArray();
    Map<String,Integer> map=new HashMap<>();
    for(int i=0;i<arr.length;i++){
          Integer upTo=map.get(String.valueOf(arr[i]));
           if (upTo==null) {
               upTo=0;
           }
          map.put(String.valueOf(arr[i]),upTo+1) ;
    }
    for (Map.Entry<String,Integer> entry:map.entrySet()){
        System.out.println("Number of "+entry.getKey()+" in this string is: "+entry.getValue());
    }

out put

Number of 3 in this string is: 2
Number of 2 in this string is: 1
Number of 4 in this string is: 1
Number of * in this string is: 1
Number of + in this string is: 1
Number of ( in this string is: 2
Number of ) in this string is: 2
Number of - in this string is: 1

答案 7 :(得分:0)

令人难以置信的是这个简单问题的答案有多复杂。

  

x.indexOf( "(" );   但那只给我第一个索引

使用x.indexOf( "(", fromIndex );查找更多事件。点。

顺便说一句,如果您正在寻找单个字符,则可以使用x.indexOf( '(');x.indexOf( '(', fromIndex );来提高效率。

所以没有重新发明轮子的最有效方法是:

int count=0;
for(int pos=s.indexOf('('); pos!=-1; pos=s.indexOf('(', pos+1)) count++;

答案 8 :(得分:0)

这将为您提供帮助!

public static int counter(String x, char y) {

    char[] array=x.toCharArray();

    int count=0;
    for(int i=0;i<x.length();i++)
    {
        if(y==array[i]) count++;

    }

    return (count>0)? count:0;  
}