Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析信息后动态输出数组信息_Java_Arrays_Arraylist - Fatal编程技术网

Java 解析信息后动态输出数组信息

Java 解析信息后动态输出数组信息,java,arrays,arraylist,Java,Arrays,Arraylist,我试图解析一些已定义的字体样式,以创建一个数组,用于确定文档中要使用的字体样式。目前,我只是显示存储在数组中的信息,看看是否正确,但我注意到它是静态存储信息的,这不是我想要的 这是我正在解析的信息: <!Font Definitions, F2 = Times 6, F3 = Times 10, F7 = Times 10 Bold, F8 = Times 9, F6 = Times 12, F9 = Symbols 12, F12

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

这是我正在解析的信息:

<!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>
这是第二次:

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();
    }
}
}
公共类测试{
公共静态void main(字符串[]args){
字符串FontID=“”;
字符串FontFamily=“”;
字符串FontSize=“”;
字符串fonttribute=“”;
ArrayList fontVariables=新的ArrayList();
添加(FontID);
添加(FontFamily);
fontVariables.add(FontSize);
添加(FontAttribute);
ArrayList fontStuff=新的ArrayList();
File infle=新文件(“C:\\Users\\Jake\\Sandbox\\test.jor.ildoc”);
试一试{
FileReader in=新的FileReader(填充);
BufferedReader readFile=新的BufferedReader(in);
弦线;

虽然(!((line=readFile.readLine()).contains(“您正在将相同的变量(
fontVariables
)添加到
fontStuff
列表中。但是Java只添加了对该列表的引用,因此您会得到一个多次引用同一变量的列表。这就是上次读取字体的原因


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

为什么不使用
String
类的
split
函数进行拆分"然后,不要使用
ArrayList
,而是将数据存储在
HashMap
中,其中键是字体ID,值是包含字体信息的数组列表。您能告诉我fontStuff来自哪里吗?实现可能有问题我意识到这不是一个格式良好的代码(对不起),我只是想把它编码好,然后把它清理干净。以前从未使用过
HashMap
,我必须看一下这些。对不起,我忘了把它放在第一个示例中。它是一个由FontF类组成的ArrayList。
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();
    }
}
}