(點選上方公眾號,可快速關註)
來源:ImportNew – 溫布利往事
Stack Overflow 是一個大型的程式設計知識庫。在 Stack Overflow 中已經有數以百萬計的問題,並且很多答案有著很高的質量。這就是為什麼 Stack Overflow 的答案經常位於 Google 搜尋結果的頂部。
儘管 Stack Overflow 上很多問題已經有了答案,每天還是會有很多問題被提出,很多問題仍然沒有被回答或者沒有獲得滿意的答案。那麼當 Stack Overflow 不能解決問題時如何去尋找答案。
隨著成千上萬的程式員使用 Java APIs 併在 Github 上分享他們的專案,這些專案能夠給我們提供很好的例子來展示如何使用 Java APIs。Java API Example 是一個搜尋門戶,它提供了一些非常受歡迎的 Java APIs 的示例程式碼。
在這篇文章中,將探討使用開原始碼(jExample)是否能夠回答排序前列的 API 相關問題。API 相關問題指的是如何使用 APIs 解決任務的問題。我們對 Stack Overflow 排在前面的問題進行了分析。
對於每一個問題,最佳答案顯示在最前面,然後是從 Java API examples (jExample) 中給出的解決方法。
1. 遍歷 HashMap
採納的答案給出了這樣的解決方法:
Map
map = …; for (String key : map.keySet()) {
// …
}
如果我們在 jExample 上搜索 “HashMap” 並跳轉到 java.util.HashMap 的示例頁面。然後點選最常見的一種方法 – entry(),我們可以快速得到如下的一個例子:
這個例子向我們展示瞭如何使用HashMap HashMap.entrySet()、Entry.getKey() 和 Entry.getValue() 來遍歷HashMap。
2. 由陣列建立 ArrayList
這個問題,答案中提供了多種方法。這裡是排名前三的方法:
// Method 1
new ArrayList(Arrays.asList(array))
// Method 2
ImmutableList.of(“string”, “elements”);
// Method 3
List l1 = Lists.newArrayList(anotherListOrCollection);
上面的三個方法能夠在 jExample 中找到:
方法 1:
方法 2:
方法 3:
如果我們不知道 ImmutableList 類就很難發現第二種方法。然而,如果我們去檢視 ImmutableList 的示例頁面,我們會學到這個類很多其它的用法。
3. 怎樣在一個範圍內產生一個隨機整數?
採納的答案給出的解決方法是:
int randomNum = rand.nextInt((max – min) + 1) + min;
如果我們檢視 java.util,Random 類的頁面,我們也能夠找到一種類似的方法:
4. 怎樣將 String 轉換為 int 型別?
最優的答案:
int foo = Integer.parseInt(“1234”);
5. 怎樣將 InputStream 轉換為 byte array?
採納的答案:
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);
6. 怎樣產生一個 MD5 雜湊?
答案提到了 MessageDigest。
7. Java 如何建立一個檔案和寫入一個檔案?
建立一個文字檔案-方法 1
PrintWriter writer = new PrintWriter(“the-file-name.txt”, “UTF-8”); writer.println(“The first line”);
writer.println(“The second line”);
writer.close();
建立一個文字檔案-方法 2
List lines = Arrays.asList(“The first line”, “The second line”);
Path file = Paths.get(“the-file-name.txt”);
Files.write(file, lines, Charset.forName(“UTF-8”));
jExample 中找到的例子:
方法 1.
方法 2.
方法 3.
8. Java 讀取一個文字檔案的最好方式?
BufferedReader br = new BufferedReader(new FileReader(“file.txt”));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
} finally {
br.close();
}
jExample 中的例子:
9. 怎樣從 java.util.Date轉換為XMLGregorianCalendar?
採納的答案:
GregorianCalendar c = new GregorianCalendar();
c.setTime(yourDate); XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
10. 如何檢查一個字串是否為數字?
採納的答案建議使用 Apache Commons Lang 中的 StringUtils.isNumeric。
這個答案的示例程式碼可能沒必要給出,因為這段程式碼只有一行。而且,如果檢視 StringUtils 的頁面,可以看到 StringUtils 最常用的方法串列。這個串列按照流行的程度排序。下麵是這份串列的一個快照:
總結
我找到了 Stack Overflow 上最熱門 10 個問題的全部示例程式碼。然而,jExample 要求使用者擁有一定的知識水平並且能夠想到大概是什麼 API 類。有些答案可能並不明顯,不過 jExample 為使用標的 API 類提供了補充資訊。側邊欄的相關類和常用方法對於檢視相關 API 類和標的 API 類的重要方法是很有用處的。
【關於投稿】
如果大家有原創好文投稿,請直接給公號傳送留言。
① 留言格式:
【投稿】+《 文章標題》+ 文章連結
② 示例:
【投稿】《不要自稱是程式員,我十多年的 IT 職場總結》:http://blog.jobbole.com/94148/
③ 最後請附上您的個人簡介哈~
看完本文有收穫?請轉發分享給更多人
關註「ImportNew」,提升Java技能