漢字轉拼音的導致的記憶體溢位

2021-07-02 03:13:27 字數 1105 閱讀 1896

上班來得第乙個任務就是把漢字轉化為拼音(主要用於搜尋名字),在網上收到了pinyin4j的開源庫,並且找了一下使用示例,感覺寫得蠻好的,就採用了他的方法,**如下:

public  static   setgetpinyin(string src)catch(badhanyupinyinoutputformatcombination e) 

}else if(((int)c >= 65 && (int)c <= 90) || ((int)c >= 97 && (int) c<= 122));

}else;}}

string pingyinarray = exchange(temp);

setpinyinset = new hashset();

for(int i= 0 ;i < pingyinarray.length; i++)

return pinyinset;

}return null;

}public static string exchange(string strjaggedarray)

private static string doexchange(string strjaggedarray)

}string newarray = new string[len-1];

for(int i = 2; i < len; i++)

newarray[0] = temp;

return doexchange(newarray);

}else

}

之後自己測試也沒有發現什麼問題,但是上線不久就出現問題了。通過檢視後台記錄發現:有使用者輸入了大概60個中文字元,我那個搜尋的執行緒已經快把記憶體給吃完了。回過頭來在看**我們就會發現在doexchange這個遞迴函式中:每一層遞迴都new 出乙個一維陣列和二維陣列。因此這樣整個遞迴過程中都在不停的new陣列,並且無法釋放(遞迴尚未返回)。這樣當遞迴層數深了之後,占用的內容便爆了,發生oom。

一共有58個中文字元。所以整個遞迴層數為58層,而且申請的空間大小近似指數上公升。

總結:以後使用遞迴函式時一定要注意函式體內new出來的物件,已經遞迴深度;還有應該做好充足的單元測試,特別是邊界條件

漢字轉拼音的類

今天有了個關於漢字相關的想法,會用到拼音,所以就上網搜尋了一下如何將漢字自動轉換為拼音,沒想到還真有,呵呵。把 貼上到這裡吧,大家一起學習。using system using system.collections.generic using system.text using system.tex...

漢字轉拼音的工具類

介紹3個方法 漢字轉換為拼音 獲取每個漢字的首字母 獲取第乙個漢字的首字母 如果是姓名,即姓的首字母 如下 pinyinutil package com.home import net.sourceforge.pinyin4j.pinyinhelper import net.sourceforge....

漢字轉拼音的類C

漢字轉拼音的類 c 將漢字轉換成為拼音 public class chs2py private static string pystr new string public chs2py public static string convert string chrstr else return re...