我是java字符串操作的新手。
考虑一个字符串包含0,1,2,如下所示
String content = "0011221100";
您可能会问我一个问题,为什么不将它存储在整数中,因为在我的情况下我应该只使用字符串。
输出为:
0's:4
1's:4
2's:2
我怎样才能实现它。
答案 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));