0

シーケンスに基づいてリストに詳細を含むヘッダーとしてファイルを分割したい。

ヘッダーと詳細を使用してテキスト ファイルを分割したい このようなことを試みましたが、役に立ちません。

iterator の前の反復を呼び出したかったのですが、できませんでした...

ファイル :

ひ>>>>>>

た>>>>>>>

た>>>>>>>

た>>>>>>>

ひ>>>>>>>

た>>>>>>>

た>>>>>>>

ひ>>>>>>>

た>>>>>>> ...

私は欲しかった :

H 、 L 、 L 、L を含むリスト 1

H 、 L 、 L を含むリスト 2

H 、 L を含むリスト 3

試したコード:

 List<String> poString = new ArrayList<String>();
    if(poString !=null && poString.size() > 0)
            {      
               ListIterator<String> iter = poString.listIterator();
               while(iter.hasNext())
               {
                String tempHead = iter.next();
                List<String> detailLst = new ArrayList<String>();
                if(tempHead.startsWith("H"))
                 {
                    while(iter.hasNext())
                    {
                        String detailt = iter.next();
                        if(!detailt.startsWith("H"))
                          detailLst.add(detailt);
                        else
                        {
                            iter.previousIndex();
                        }
                    }
                 }
               }
4

4 に答える 4

0

これを試してください(テストされていません):

BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
        List<StringBuilder> myList = new List<StringBuilder>();
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();
        while (line != null) {
        if (line[0] == 'H')
        {
            myList.add(sb);  
            sb = new StringBuilder();                               
        }   
        sb.append(line[0]);        
        line = br.readLine();
    }
} finally {
    br.close();
}
于 2013-02-04T12:35:41.090 に答える
0

これを使用できます..

public static void main(String a[]) throws Exception
{
    ArrayList<String> headers=new ArrayList();
    ArrayList<String> lines=new ArrayList();
    HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>(); 
    File f= new File("inputfile.txt");
    Scanner scanner = new Scanner(f);
    try {
      while (scanner.hasNextLine()){
       String ss=scanner.nextLine();
       String key= String.valueOf(ss.charAt(0));
       if ( map.containsKey(key))
       {
           ArrayList<String> temp=(ArrayList) map.get(key);
           temp.add(ss);
           map.put(key, temp);
       }
       else
       {
           ArrayList<String> temp= new ArrayList();
           temp.add(ss);
           map.put(key, temp);
       }
      }
    }
      catch(Exception e)
      {
          throw e;
      }

}

于 2013-02-04T12:41:47.183 に答える
0

私が理解している限りでは、最終的にH..linesファイルに何個、何List<String>個入れたいと思うでしょうか。

正確な数がわからない場合 (この例では 3 です)、List of List ( List<List<String>>) があります。

//read the file, omitted

List<List<String>> myList = new ArrayList<<List<String>>();
List<String> lines = null;
boolean createList = false;
while (line != null) {
    if (line.startsWith("H")){
      myList.add(lines);
      lines = new ArrayList<String>();
    }
//if the 1st line of your file not starting with 'H', NPE, you have to handle it
   lines.add(line);
   line=readnextlineSomeHow(); //read next line
}

上記のコードはそのままでは機能しない場合がありますが、アイデアは得られます。

于 2013-02-04T13:00:05.977 に答える
0

これを試してください、私は自分で少し試してみましたが、うまくいきます

    BufferedReader br = new BufferedReader(new FileReader("file.txt"));
    ArrayList<ArrayList<String>> result = new ArrayList<> ();
    int numlines =0;
    try {
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();
        while (line != null) {
            if (line.startsWith("H"))
            { 
                   result.add(new ArrayList<String>());
                   result.get(numlines).add("H");

                   line = br.readLine();

                   while(line != null && !line.startsWith("H")){
                       if(line.startsWith("L")) result.get(numlines).add("L");
                       line = br.readLine();
                   }
                   ++numlines;
            }        
            else line = br.readLine();
        }

    } finally {
        br.close();
    }
于 2013-02-04T13:09:26.697 に答える