2013-05-17 81 views
1
public class TagHandler { 

private final String START = "<START "; 
private final String END = "<END "; 


    public String handleTag(String buf, String[] attrList) { 

    String startPattern1 = START+attrList[0]+">"; 
    String endPattern1 = END+attrList[0]+">"; 

    String startPattern2 = START+attrList[1]+">"; 
    String endPattern2 = END+attrList[1]+">"; 

    String startPattern3 = START+attrList[2]+">"; 
    String endPattern3 = END+attrList[2]+">"; 

    String startPattern4 = START+attrList[3]+">"; 
    String endPattern4 = END+attrList[3]+">"; 

    String startPattern5 = START+attrList[4]+">"; 
    String endPattern5 = END+attrList[4]+">"; 


      String extract1 = new String(buf); 
    String extract2 = new String(buf); 
    String extract3 = new String(buf); 
    String extract4 = new String(buf); 
    String extract5 = new String(buf); 

      extract1 = extract1.substring(extract1.indexOf(startPattern1)+startPattern1.length(), extract1.indexOf(endPattern1)); 
    extract2 = extract2.substring(extract2.indexOf(startPattern2)+startPattern2.length(), extract2.indexOf(endPattern2)); 
    extract3 = extract3.substring(extract3.indexOf(startPattern3)+startPattern3.length(), extract3.indexOf(endPattern3)); 
    extract4 = extract4.substring(extract4.indexOf(startPattern4)+startPattern4.length(), extract4.indexOf(endPattern4)); 
    extract5 = extract5.substring(extract5.indexOf(startPattern5)+startPattern5.length(), extract5.indexOf(endPattern5)); 

String s = ("BLOPABP"+extract1) + ("\nBLOPCALL"+extract2) +("\nBLOPEXP"+extract3) +("\nBLOPHEAD"+extract4)+("\nBLOPMAJ"+extract5); 

return s; 
    } 

如何整理上面的代碼到某種循環中?基本上我有一個文件,我正在閱讀並提取標籤內的數據,並且將標籤傳遞到此TagHandler方法中,並將提取的數據作爲帶標籤標頭的字符串返回,而不包含「< START>」和「< END TAG「>只在開始標籤上留下標題。我將如何整理這個代碼到Java中的循環?

+0

你可以使用一個數組而不是那麼多的變量,我想!!! – NINCOMPOOP

+0

通過使用'array'和'for-loop'。 – Tdorno

+0

你能告訴我該怎麼做嗎? – Lance

回答

0

你可以嘗試這樣的事情,如果可以優化它:

public String handleTag(String buf, String[] attrList) { 
    StringBuilder temp = new StringBuilder(); 
    final String[] prefix = {"BLOPABP","\nBLOPCALL","\nBLOPEXP", 
         "\nBLOPHEAD","\nBLOPMAJ"}; 
    for(int i=0;i<attrList.length;i++){ 
     String startPattern = START+attrList[i]+">"; 
     String endPattern = END+attrList[i]+">"; 
     String extract = new String(buf); 
     extract = extract.substring(
       extract.indexOf(startPattern)+startPattern.length(), 
       extract.indexOf(endPattern)); 
     temp.append(prefix[i%5]+extract); 
    } 

    return temp.toString(); 
} 
+0

謝謝大家!這實際上工作!但我的問題是爲什麼在「temp.append(prefix [i%5] + extract)」這一行有一個模數符號;「 – Lance

+0

我只是想確保如果'attrList.length> 5','prefix [i%5]'不會拋出'ArrayIndexOutOfBoundsException' .. – NINCOMPOOP

+0

如何在沒有模數的情況下編寫它? – Lance

1

在這裏你去。這應該做你想做的。

public class TagHandler { 

private final String START = "<START "; 
private final String END = "<END "; 

public String handleTag(String buf, String[] attrList) { 

    String[] blop = {"BLOPABP", "BLOPCALL", "BLOPEXP", "BLOPHEAD", "BLOPMAJ"}; 
    String s = ""; 

    for (int i = 0; i < attrList.length; i++) { 
     String startPattern = START+attrList[i]+">"; 
     String endPattern = END+attrList[i]+">"; 
     String extract = buf.substring(buf.indexOf(startPattern)+startPattern.length(), buf.indexOf(endPattern)); 
     s += blop[i]+extract; 
     if (i < attrList.length-1) { 
      s += "\n"; 
     } 
    } 
    return s; 

} 

} 

尋找出一個出界異常,如果attrList已超過500元。

0

這應該工作。你可以,如果你使用的是Java 7

private final String START = "<START "; 
private final String END = "<END "; 
List<String> startPatterns = new ArrayList<String>();//can use ArrayList<> instead if java 1.7 
List<String> stringExtracts = new ArrayList<String>(); 
final String[] tags = new String[]{"BLOPABP","\nBLOPCALL","\nBLOPEXP","\nBLOPHEAD","\nBLOPMAJ"}; 

public String handleTag(String buf, String[] attrList) { 
    int numPatterns = tags.length; 
    String s; 
    String extract = new String(buf); 
    for(int i=0; i<numPatterns; i++){ 
     String startPattern = START+attrList[i]+">"; 
     startPatterns.add(startPattern); 
     String endPattern = END+attrList[i]+">"; 
     endPatterns.add(endPattern); 
     String extract = extract.substring(extract.indexOf(startPattern)+startPattern.length(), extract.indexOf(endPattern)); 
     stringExtracts.add(extract); 
     s += tags[i] + extract; 
    } 
    return s; 
} 

這是假設你需要訪問個人startPatterns,endPatterns和stringExtracts再次,不只需S代替= new ArrayList<String>= new ArrayList<>()。如果你只需要s然後丟棄ArrayLists - 它會這樣工作:

private final String START = "<START "; 
private final String END = "<END "; 
final String[] tags = new String[]{"BLOPABP","\nBLOPCALL","\nBLOPEXP","\nBLOPHEAD","\nBLOPMAJ"}; 

public String handleTag(String buf, String[] attrList) { 
    int numPatterns = tags.length; 
    String s; 
    String extract = new String(buf); 
    for(int i=0; i<numPatterns; i++){ 
     String startPattern = START+attrList[i]+">"; 
     String endPattern = END+attrList[i]+">"; 
     String extract = extract.substring(extract.indexOf(startPattern)+startPattern.length(), extract.indexOf(endPattern)); 
     s += tags[i] + extract; 
    } 
    return s; 
}