標籤:pre space put 頻率 substr hash ring 輸出 static
public class HighFrequencyWord {
public static void findFrequencyWord(String str) {
Collection<Integer> al=new ArrayList<Integer>();
Map<String,Integer> map=new HashMap<String,Integer>();
String tempStr = str;
String[] stringArray = str.split("");
System.out.println(" stringArray.length = "+stringArray.length);
//用來儲存字串裡每一個出現過的字元,且不會出現反覆的
Set<String> set = new HashSet<String>();
int stringLength = stringArray.length;
for (int i = 0; i < stringLength; i++) {
set.add(stringArray[i]);
}
//移掉set中的一個Null 字元
set.remove("");
System.out.println(set);
int count = 0;
boolean flag = true;
for (String s : set) {
while (flag) {
//假設索引存在
if (tempStr.indexOf(s) != -1) {
//記錄出現字元的當前位置
int index = tempStr.indexOf(s);
//讓字串從下一索引處開始
tempStr = tempStr.substring(index+1);
//假設索引存在,記錄值加1
count++;
} else {
//假設索引不存在,賦值false退出迴圈
flag = false;
}
}
//為了運行下一迴圈
flag = true;
//把值存入map,讓字元與其頻率相應
map.put(s,count);
//由於是上一結果,所以讓值歸零,而且字串變回原來的字串
count = 0;
tempStr = str;
}
//將map的值變為一個列表
al= map.values();
//然後轉為數組
Integer[] stringCount =al.toArray(new Integer[]{});
int countLength=stringCount.length;
//按升序排序
Arrays.sort(stringCount);
//得到數組最大值
int max=stringCount[countLength-1];
for(String s: set){
for(int i=0;i<countLength;i++){
//假設map的值與最大值同樣,則輸出
if(map.get(s)==max){
System.out.println(s + ":" + max);
}
}
}
}
public static void main(String[] args) {
findFrequencyWord("ababbsssss");
}
Java 字串計算頻率出現最高的字元