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"> 開始タグのヘッダーのみを残します。

4

3 に答える 3

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要素が 5 つを超える場合は、範囲外の例外に注意してください。

于 2013-05-17T15:47:51.260 に答える
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();
}
于 2013-05-17T15:43:26.097 に答える
0

これはうまくいくはずです。= new ArrayList<String>Java 7 を使用して= new ArrayList<>()いる場合は、に置き換えることができます。

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;
}

これは、s. ただし、 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;
}
于 2013-05-17T15:57:37.143 に答える