2012-10-04 67 views
1

好的..我是一個Python總人,很少與Java及其方法一起工作。條件是我得到了一個Java函數,我必須向我的導師解釋,而我也不知道如何去做。如果你們其中一個人可以正確閱讀這個,請幫助我分解它並解釋它。另外,如果有任何問題,我需要找出其操作中的任何缺陷(即使用循環等)。最後,'string'和'string []'類型有什麼區別?Java函數分析

public static void search(String findfrom, String[] thething){ 
    if(thething.length > 5){ 
     System.err.println("The thing is quite long"); 
    } 

    else{ 
     int[] rescount = new int[thething.length]; 
     for(int i = 0; i < thething.length; i++){ 
      String[] characs = findfrom.split("[ \"\'\t\n\b\f\r]", 0); 
      for(int j = 0; j < characs.length; j++){ 
       if(characs[j].compareTo(thething[i]) == 0){ 
        rescount[i]++; 
     } 
    } 
     } 
     for (int j = 0; j < thething.length; j++) { 
      System.out.println(thething[j] + ": " + rescount[j]); 
     } 
    } 
} 
+0

回答「finally」問題:String是一個字符數組,String []是一個字符串數組。 – azendh

+0

'dataType variableName' - 定義數據類型(dataType)的單個變量(variableName)。 'dataType [] variableName' - 定義數據類型(dataType)的數組變量(variableName)。 其中大部分代碼都是自我解釋的,''thething.length'是東西的長度。如果你自己仔細閱讀代碼並且說出你不明白的東西(我對Python不熟悉,所以不知道它與Java有多不同),會更容易。 –

回答

1
  • 1對:findfrom是一個字符串,它應該是"[ \"\'\t\n\b\f\r]"(正則表達式)分隔。

  • 第2段:thething是一個字符串數組,它包含最多5串, 的方法找到了多少次字符串在findfrom「thething」。並將結果打印出來。

例如,

findfrom="hello'there'happy'birthday'" 
thething={"there","birthday","hello","birthday"} 

result would be: 
there: 1 
birthday: 2 
hello: 1 
birthday: 2 

順便說一句,線

String[] characs = findfrom.split("[ \"\'\t\n\b\f\r]", 0); 

可能移出for循環的。因爲findfrom沒有改變,所以不需要重複分割。

+0

謝謝。這很有幫助。 – khan

1
if(thething.length > 5){ 
     System.err.println("The thing is quite long"); 
} 

如果String[] thething的長度大於5.打印錯誤.. 如果沒有做什麼其他如下塊內。

else{

int[] rescount = new int[thething.length]; 

與大小等於所述String[] thething

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

長度對於每個索引i字符串[] thething創建的int秒的新的數組。

String[] characs = findfrom.split("[ \"\'\t\n\b\f\r]", 0); 

創建一個新的String []所謂characs,其將字符串findfrom到基於正則表達式"[ \"\'\t\n\b\f\r]"幾個部分。 0表示這種模式將盡可能多次應用。

for(int j = 0; j < characs.length; j++){ 

現在對於在String [] characs每個索引j ...

if(characs[j].compareTo(thething[i]) == 0){ 

比較在characs字符串的String []在索引i thething的String []指數j與字符串。

如果兩者匹配即所述compareTo方法返回0

rescount[i]++; 

逐個增加int即在int[]rescount索引i

for (int j = 0; j < thething.length; j++) { 
     System.out.println(thething[j] + ": " + rescount[j]); 
    } 

最後在String[]thething打印出該索引處的字符串的每個索引j並在int[]rescount

,並且也是Stringint該索引處是字符數組,例如String string = "word"和一個String[]是一個數組字符串。例如String[] strings = new String[]{"word1", "word2",....}.

+0

謝謝,夥計。它幫助了很多。 – khan

1
public class Test { 

    public static void main(String[] args) { 
     search(
      "you like me but do you \"like like\" me", 
      new String[]{"you", "like", "me", "not"} 
     ); 
    } 

    /** 
    * Given a string of words (each word separated by one or more of the 
    * following characters: tab, carriage return, newline, single quote, double 
    * quote, a form feed, or a word boundary) count the occurrence of each 
    * search term provided, with a 5 term limit. 
    * 
    * @param findfrom 
    *   the string of words 
    * @param thething 
    *   the search terms. 5 at most, or count will not be performed. 
    */ 
    public static void search(String findfrom, String[] thething) { 
     if (thething.length > 5) { 
      System.err.println("The thing is quite long"); 
     } 
     else { 
      String[] characs = findfrom.split("[ \"\'\t\n\b\f\r]", 0); 
      int[] rescount = new int[thething.length]; 
      for (int i = 0; i < thething.length; i++) { 
       for (int j = 0; j < characs.length; j++) { 
        if (characs[j].compareTo(thething[i]) == 0) { 
         rescount[i]++; 
        } 
       } 
      } 
      for (int j = 0; j < thething.length; j++) { 
       System.out.println(thething[j] + ": " + rescount[j]); 
      } 
     } 
    } 
} 

輸出

you: 2 
like: 3 
me: 2 
not: 0 
+0

謝謝joe ...你看到這段代碼中的任何缺陷?我的意思是任何可以修改以增強功能的東西? – khan

+0

除了肯特所說的,關於移動內部循環之外的.split()。 –

1

的Python版本的代碼會是這樣的:

import sys 
import re 

def search(findfrom, thething): 
    """Take a string and a list of strings. Printout each of the strings 
in the list and a count of how many times that string appeared in the 
input string. The string comparison will be based on the input string being 
divided up into tokens. The delimiter for each token will be either a whitespace 
character, a single quote, or a double quote. """ 
    if len(thething) > 5: 
     sys.stderr.write("The thing is quite long") 
    else: 
     rescount = [0] * len(thething) 
     for i in range(0,len(thething)): 
      characs = re.split("[ \"\'\t\n\b\f\r]", findfrom) 
      for j in range(0,len(characs)): 
       if characs[j] == thething[i]: 
        rescount[i] = rescount[i] + 1 

     for j in range(0,len(thething)): 
      print thething[j] + ": " + str(rescount[j]) 


string = 'you like me but do you "like like" me' 
strings = ["you", "like", "me", "not"] 
search(string,strings) 

輸出:

you: 2 
like: 3 
me: 2 
not: 0 
+0

謝謝滑板車。 – khan