计算java中字符串中的1,0,2的数量

时间:2014-02-17 11:20:58

标签: java string

我是java字符串操作的新手。

考虑一个字符串包含0,1,2,如下所示

String content = "0011221100";

您可能会问我一个问题,为什么不将它存储在整数中,因为在我的情况下我应该只使用字符串。

输出为:

0's:4
1's:4
2's:2

我怎样才能实现它。

9 个答案:

答案 0 :(得分:7)

如果您只需要搜索1's,0's,2's 所以你可以尝试这样的事情:

 String content = "0011221100";
 int zeros = content.length() - content.replaceAll("0", "").length();
 int ones = content.length() - content.replaceAll("1", "").length();
 int twos = content.length() - content.replaceAll("2", "").length();
 System.out.println("0's:" + zeros);
 System.out.println("1's:" + ones);
 System.out.println("3's:" + twos);

答案 1 :(得分:5)

使用toCharArray()循环浏览String的字符。

对于每个字符,请使用Character.isDigit

检查它是否为数字

增加您为此数字找到的出现次数(您可以使用包含10个广告位的int数组,Character.getNumericValue将非常有用。

如果您知道String中只有数字,则第2步无用。

答案 2 :(得分:3)

你可以这样试试。

    String content = "0011221100";
    Map<String,Integer> count=new HashMap<>();
    for(char i:content.toCharArray()){
        Integer index=count.get(String.valueOf(i));
       if(index!=null){
           count.put(String.valueOf(i),index+1);
       }else {
           count.put(String.valueOf(i),1);
       }
    }
    System.out.println(count);

Out put:

    {2=2, 1=4, 0=4}

答案 3 :(得分:3)

我建议尝试以下方法:

int[] amountOfNumbers = new int[3];

for(int i = 0; i < content.length(); i++){
    // Index 0 representing the number of 0s , Index 1 ..... and so on
    amountOfNumbers[content.charAt(i)-'0']++;
}

现在,您可以简单地询问索引,并在String中获取value = index的数字量。

我必须提到int[] array必须具有相同数量的条目,因为字符串中的数字不同。

如果您想了解更多信息,可以阅读维基百科上的Countingsort文章: here。我的方法是圆形的,然后对它进行排序。

如果你知道字符串常量的数字范围,这个方法是适用的。

答案 4 :(得分:1)

public static void SymbolCounter( String source_ ) throws ParseException
{
    Map<Character, Integer> symbolCounter   = new HashMap<Character, Integer>();

    for( int i = 0 ; i < source_.length() ; ++i )
    {
        Character   symbol  = source_.charAt( i );
        Integer     counter = symbolCounter.get( symbol );

        if( null == counter )
        {
            counter = new Integer( 1 );

        }
        else
        {
            counter = counter + 1;

        }

        symbolCounter.put( symbol, counter );

    }

    Set<Character>  kyes    = symbolCounter.keySet();

    for( Character symbol : kyes )
    {
        Integer counter = symbolCounter.get( symbol );

        System.out.println( symbol.toString() + "'s:" + counter.toString() );

    }

}

答案 5 :(得分:0)

for (i=0;i<10;i++){
    reg=new RegExp("[^" + i + "]",'g');
    console.log(" " + i + "'s:" + content.replace(reg,"").length);
}

答案 6 :(得分:0)

你去了:

void PrintCount(String content)
{
    int[] histogram = new int[10];
    for (int i=0; i<10; i++)
        histogram[i] = 0;

    for (char c : content.toCharArray())
    {
        if ('0' <= c && c <= '9')
            histogram[c-'0']++;
    }

    for (int i=0; i<10; i++)
        System.out.println(i+"'s:"+histogram[i]);
}

答案 7 :(得分:0)

我知道这正在使死马复活,但是Java Streams现在有了另一种选择。

"0011221100".chars().boxed().collect(
    Collectors.groupingBy(Character::getNumericValue, Collectors.counting()));

答案 8 :(得分:0)

如果您使用的是Java 8或更高版本,则可以使用以下代码:

String temp = "0011221100";
Arrays.stream(temp.split(""))
            .collect(Collectors.groupingBy(s -> s, TreeMap::new, Collectors.counting()))
            .forEach((key, value) -> System.out.println(key + "'s:" + value));