我需要知道一个字符串中有多少个相同类型的字符。
我试过这个
String x ="(3+3)*(4-2)";
int a = x.indexOf( "(" );
但那只给我第一个索引
答案 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(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;
}