[英]Calculate how many same letters to display
import java.util.Scanner;
public class abc {
public static void main(String[] args) {
char[] ch = str.toCharArray();
int len = ch.length;
for (int i = 0; i < len; i++) {
int counte = 0;
char c = str.charAt(i);
for (int j = 0; j < len; j++) {
if (c == ch[j]) {
counte++;
ch[j] = '\u0000';
}
}
if (counte > 0) System.out.print(c + "-" + counte + ",");
}
}
}
Input:输入:
BBBBBbbbbbbCCooooPPPu
BBBBBbbbbbbCCooooPPPu
Output:输出:
5-B,6-b,2-C,4-o,3-P,1-u
5-B,6-b,2-C,4-o,3-P,1-u
But I want the output to be:但我希望输出是:
6-b,5-B,4-o,3-P,2-C,1-u
6-b,5-B,4-o,3-P,2-C,1-u
How can I solve this?我该如何解决这个问题?
Check this example code using classes found in java.util使用 java.util 中的类检查此示例代码
import java.util.*;
import java.text.*;
public class abc {
public static void main(String[] args) {
//String as parameter. Should be args[0]; or something?
String str = "BBBBBbbbbbbCCooooPPPu";
//Format with leading zeros to allow sorting up to 999
NumberFormat nf = new DecimalFormat("000");
//Create reverse-sorted set to hold counts
Set<String> sorted = new TreeSet<String>(Collections.reverseOrder() );
[...] //Do your thing as before...
if (counte > 0) {
//Add to Set (ordered...) using number format
sorted.add(nf.format(counte) + "-" + c);
}
}
//Join together set to create output String
StringJoiner sj = new StringJoiner(",");
for(String s : sorted) {
//Trim away leading zeros
sj.add(s.replaceAll("\\G0", ""));
}
//Output
System.out.println(sj.toString());
}
}
Don't print the values 5-B
, 6-b
etc.. but store their value in an array and the number of occurrences would be the key :不要打印值
5-B
、 6-b
等,而是将它们的值存储在一个数组中,出现的次数将是关键:
result[5] = '5-B';
result[6] = '6-b';
// etc...
and finally just inverse this array with some sorting function.最后用一些排序函数反转这个数组。
You need to sort.你需要排序。
The following code do this, never minds if letters are consecutives or not.以下代码执行此操作,不管字母是否连续。
public static void see_string ()
{
List<Pair<Integer,String>> lp=new ArrayList<Pair<Integer,String>>();
Map<String, Integer> mci=new HashMap<String, Integer>();
// Populate
String str="mylongstringtoscanandsomore";
str="BBBBBbbbbbbCCooooPPPu";
int size=str.length();
for (int pos=0;pos<size;pos++)
{
String ch=str.substring(pos,pos+1);
int val=0;
if (mci.containsKey(ch)) {val=mci.get(ch);}
val++;
mci.put(ch, val);
}
// map => list
for (Map.Entry<String, Integer> e : mci.entrySet())
lp.add(new Pair<Integer,String>(e.getValue(),e.getKey()));
// SORT
reverse_sort(lp);
size=lp.size();
// See
for (int pos=0;pos<size;pos++)
{
System.out.println(lp.get(pos).getLeft()+"=>"+lp.get(pos).getRight());
}
}
// http://stackoverflow.com/questions/521171/a-java-collection-of-value-pairs-tuples
public class Pair<L,R> implements java.io.Serializable {
private final L left;
private final R right;
public Pair(L left, R right) {
this.left = left;
this.right = right;
}
public L getLeft() { return left; }
public R getRight() { return right; }
@Override
public int hashCode() { return left.hashCode() ^ right.hashCode(); }
@Override
public boolean equals(Object o) {
if (o == null) return false;
if (!(o instanceof Pair)) return false;
Pair pairo = (Pair) o;
return this.left.equals(pairo.getLeft()) &&
this.right.equals(pairo.getRight());
}
}
// T key to sort
static public <T extends Comparable<T>, Object,K extends Object>
void reverse_sort(List<Pair<T,K>> _list)
{
class ComparaterTK <T extends Comparable<T>,K> implements Comparator<Pair<T,K>>
{
public int compare(Pair<T,K> ob1, Pair<T,K> ob2)
{
return ob2.getLeft().compareTo(ob1.getLeft());
}
}
// simple sort
Collections.sort(_list, new ComparaterTK<T,K>());
}
This is the easiest way of reaching your requirement using lambdas.这是使用 lambda 达到您的要求的最简单方法。
String string = "BBBBBbbbbbbCCooooPPPu";
Stream.of(string.split(""))
.collect(Collectors.groupingBy(s -> s, Collectors.counting()))
.entrySet().stream().
sorted((Map.Entry<String, Long> o1, Map.Entry<String, Long> o2) -> o2.getValue().compareTo(o1.getValue())).
forEachOrdered(e -> System.out.print(e.getValue() + " - " + e.getKey()+", "));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.