Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一个字符串中的相同字符_Java_String_Types_Char - Fatal编程技术网

Java 一个字符串中的相同字符

Java 一个字符串中的相同字符,java,string,types,char,Java,String,Types,Char,我需要知道一个字符串中有多少相同类型的字符 我试过这个 String x ="(3+3)*(4-2)"; int a = x.indexOf( "(" ); 但这只给了我第一个索引 或 使用 或 有几种方法可以考虑这样做,但最简单的方法之一是简单地循环字符串中的字符 String x ="(3+3)*(4-2)"; int count = 0; for (char c : x.toCharArray()) { if (c == '(') { count++; }

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

我试过这个

String x ="(3+3)*(4-2)";
int a = x.indexOf( "(" );
但这只给了我第一个索引

使用


有几种方法可以考虑这样做,但最简单的方法之一是简单地循环
字符串中的字符

String x ="(3+3)*(4-2)";
int count = 0;
for (char c : x.toCharArray()) {
    if (c == '(') {
        count++;
    }
}
System.out.println(count);
仅仅因为它可以完成…你可以使用一点regexp…(我知道,太夸张了)


有几种方法可以考虑这样做,但最简单的方法之一是简单地循环
字符串中的字符

String x ="(3+3)*(4-2)";
int count = 0;
for (char c : x.toCharArray()) {
    if (c == '(') {
        count++;
    }
}
System.out.println(count);
仅仅因为它可以完成…你可以使用一点regexp…(我知道,太夸张了)


您可以使用循环并使用另一种方法
indexOf(int,int)


您可以使用循环并使用另一种方法
indexOf(int,int)


似乎最好将其放在一个单独的函数中:

// 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

}

似乎最好将其放在一个单独的函数中:

// 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

}

下面的代码符合您的要求。如果性能非常关键,您可以使用此功能进行优化。如果您想要更优雅的解决方案,可以看看java的regex库

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++;
}
int出现次数=0;
字符串x=“(3+3)*(4-2)”;
char-tolookfor='(';
对于(int i=0;i
下面的代码符合您的要求。如果性能至关重要,您可以对此进行优化。如果您想要更优雅的解决方案,您可以查看java的regex库

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++;
}
int出现次数=0;
字符串x=“(3+3)*(4-2)”;
char-tolookfor='(';
对于(int i=0;i
您可以试试这个

    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());
    }
你可以试试这个

    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());
    }

如此简单的问题的答案竟如此复杂,令人难以置信

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++;

如此简单的问题的答案竟如此复杂,令人难以置信

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++;
这对你有帮助

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;  
}
公共静态整型计数器(字符串x,字符y){
char[]数组=x.toCharArray();
整数计数=0;
对于(int i=0;i0)?计数: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;  
}
公共静态整型计数器(字符串x,字符y){
char[]数组=x.toCharArray();
整数计数=0;
对于(int i=0;i0)?计数:0;
}

哦,我忽略了所有其他人之间的答案。很高兴看到有其他人知道存在该方法,并提供了一个没有开销的答案。哦,我忽略了所有其他人之间的答案。很高兴看到有其他人知道存在该方法,并提供了一个没有开销的答案。我不认为为这样一个琐碎的任务添加第三方库是一个很好的建议。但是当复制方法的代码时,不应该将第二个参数重命名为“regex”因为它不像正则表达式那样对待它。它调用的是只进行精确匹配的
String.indexOf
。我认为仅仅为这样一个琐碎的任务添加第三方库不是一个好建议。但是在复制方法的代码时,不应该将第二个参数重命名为“regex”因为它不把它当作正则表达式,它调用的是只进行精确匹配的
String.indexOf