2014-06-06 59 views
-1

我试图解析一些定义的字体样式来创建一个数组,用于确定在文档中使用什么样的字体样式。目前,我只是显示存储在数组中的信息,以查看是否正确,但我注意到它正在静态存储信息,这不是我想要的。解析信息后动态输出数组信息

这是我解析通过信息:我试过两个不同的时间来获得我想要的输出

<!Font Definitions, 
    F2 = Times 6, 
    F3 = Times 10, 
    F7 = Times 10 Bold, 
    F8 = Times 9, 
    F6 = Times 12, 
    F9 = Symbols 12, 
    F12 = Times 10 Italic, 
    F13 = Helvetica 14 Bold, 
    F15 = Times 12 Bold, 
    F16 = Times 15, 
    F17 = Times 14 Bold, 
    F18 = Times 18 Bold, 
    F25 = Times 6 Bold, 
    F26 = Times 6 Italic, 
    F27 = Times 21 Bold, 
    F28 = Times 27 Bold, 
    F30 = Times 15 Bold, 
    F37 = Times 9 Bold, 
    F38 = Times 9 Italic> 

。这是第一次尝试:

*注意:text.jor.ildoc文件是一个QuickSilver文件。我解析的信息的工作原理相同,如果你要把它放入一个文本文件。

public class Test { 

    private class FontF { 
     private String FontID; 
     private String FontFamily; 
     private String FontSize; 
     private String FontAttribute; 
    } 

    Test test = new Test(); 
    FontF fontF = test.new FontF(); 

    public static void main(String[] args) { 
     File infile = new File("C:\\Users\\Jake\\Sandbox\\test.jor.ildoc"); 
       ArrayList<FontF> fontStuff = new ArrayList<FontF>(); 
     try { 
      FileReader in = new FileReader(infile); 
      BufferedReader readFile = new BufferedReader(in); 
      String line; 
      while (!((line = readFIle.readLine()).contains("<!Font Definitions,"))) { 

     } 
     int counter = 0; 
     while (!((line = readFile.readLine()).compareTo("") == 0)) { 
      String id,temp; 
      id = line.substring(0, line.indexOf(" ")); 
      id = id.trim(); 
      temp = line.substring(line.indexOf("=") + 1); 
      temp = temp.trim(); 
      temp = temp.substring(0, temp.length() - 1); 
      String[] array = temp.split(" "); 
      fontStuff.add(fontF); 
      fontStuff.get(counter).FontID = id; 
      fontStuff.get(counter).FontFamily = array[0]; 
      fontStuff.get(counter).FontSize = array[1]; 
      if (array.length == 3) { 
       fontStuff.get(counter).FontAttribute = array[2]; 
      } else { 
       fontStuff.get(counter).FontAttribute = "Normal"; 
      } 
      counter++; 
     } 
    } 
    for (int i = 0; i < fontStuff.size(); i++) { 
     System.out.println("FontID: " + fontStuff.get(i).FontAttribute); 
     System.out.println("FontFamily: " + fontStuff.get(i).FontFamily); 
     System.out.println("FontSize: " + fontStuff.get(i).FontSize); 
     System.out.println("FontAttribute: " + fontStuff.get(i).FontAttribute); 
     System.out.println(); 
    } 
    readFile.close(); 
    in.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
} 

这是第二次:

public class Test { 

public static void main(String[] args) { 
    String FontID = ""; 
    String FontFamily = ""; 
    String FontSize = ""; 
    String FontAttribute = ""; 
    ArrayList<String> fontVariables = new ArrayList<String>(); 
    fontVariables.add(FontID); 
    fontVariables.add(FontFamily); 
    fontVariables.add(FontSize); 
    fontVariables.add(FontAttribute); 
    ArrayList<ArrayList<String>> fontStuff = new ArrayList<ArrayList<String>>(); 
    File infile = new File("C:\\Users\\Jake\\Sandbox\\test.jor.ildoc"); 
    try { 
     FileReader in = new FileReader(infile); 
     BufferedReader readFile = new BufferedReader(in); 
     String line; 
     while (!((line = readFile.readLine()).contains("<!Font Definitions,"))) { 

     } 
     int counter = 0; 
     while (!((line = readFile.readLine()).compareTo("") == 0)) { 
      if (line.contains("=")) { 
       String id,temp; 
       id = line.substring(0,line.indexOf(" ")); 
       id = id.trim(); 
       temp = line.substring(line.indexOf("=") + 1); 
       temp = temp.trim(); 
       temp = temp.substring(0, temp.length() - 1); 
       String[] array = temp.split(" "); 
       fontStuff.add(fontVariables); 
       fontStuff.get(counter).set(0, id); 
       fontStuff.get(counter).set(1, array[0]); 
       fontStuff.get(counter).set(2, array[1]); 
       if (array.length==3) { 
        fontStuff.get(counter).set(3, array[2]); 
       } else { 
        fontStuff.get(counter).set(3, "Normal"); 
       } 
       counter++; 
      } 
     } 
     for (int i = 0; i < fontStuff.size(); i++) { 
      System.out.println("FontID: " + fontStuff.get(i).get(0)); 
      System.out.println("FontFamily: " + fontStuff.get(i).get(1)); 
      System.out.println("FontSize: " + fontStuff.get(i).get(2)); 
      System.out.println("FontAttribute: " + fontStuff.get(i).get(3)); 
      System.out.println(); 
     } 
     readFile.close(); 
     in.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

如果有人可以帮助我得到它的正确显示的信息,我会很感激输入。目前,它只能显示最后一次字体信息19次(F38)。

+0

为什么不使用'String'类的'split'函数从开始分割并使用它来访问每个组件。然后,而不是使用'ArrayList',将数据存储在'HashMap '中,其中您的键是字体ID,值是包含字体信息的数组列表。 –

+0

我必须尝试。我意识到这是不是格式良好的代码(对不起),我只是要编码它的工作,然后清理它。以前从未使用过'HashMap',我不得不看看那些。 – Jake

+0

您能否告诉我们fontStuff来自哪里?执行该操作可能存在问题。 –

回答

1

您正在向fontStuff列表中添加相同的变量(fontVariables)。但是Java只添加了一个对列表的引用,所以你会得到一个多次提到同一个变量的列表。这就是为什么你读了最后一次字体很多次的原因。

要保留所有字体的列表,您必须在循环的每次迭代中分配一个新的fontVariables

+0

就是这样!谢谢,现在效果很好:) – Jake