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