我正在尝试创建一个JAVA程序,该程序从txt文件中读取一些标记,并创建将这些标记作为字段的对象。我正在发布我有问题的代码的一部分:
try{
line = reader.readLine();
while(line != null){
if (!line.trim().equals(" ") && line.trim().equals("ITEM_LIST")) {
line = reader.readLine();
if (line != null && line.trim().equals("{"))) {
line = reader.readLine();
if (line != null) {
if (line.trim().equals("ITEM")) {
line = reader.readLine();
if (line != null) {
if (line.trim().equals("{")) {
if (line != null) {
line = reader.readLine();
while (!((line.trim().startsWith("ITEM_TYPE ")) {
line = reader.readLine();
if((line.trim().startsWith("ITEM_TYPE ")){
String devType = line.trim().substring(10);
}
)
if(devType.toLowerCase() == "tv"){
dev = new TV();
line = reader.readLine();
if (line != null){
if (line.trim().toUpperCase().startsWith("CODE ")) {
dev.setCode(line.substring(5).trim());
}
}
line = reader.readLine();
if (line != null){
if (line.trim().toUpperCase().startsWith("MODEL ")) {
dev.setModelName(line.substring(6).trim());
}
}
line = reader.readLine();
if (line != null){
if (line.trim().toUpperCase().startsWith("MODEL_YEAR ")) {
dev.setYear(line.substring(11).trim());
}
}
line = reader.readLine();
if (line != null){
if (line.trim().toUpperCase().startsWith("MANUFACTURER ")) {
dev.setConstructor(line.substring(13).trim());
}
}
line = reader.readLine();
if (line != null){
if (line.trim().toUpperCase().startsWith("PRICE ")) {
dev.setPrice(Double.parseDouble(line.substring(6).trim()));
}
}
line = reader.readLine();
if (line != null){
if (line.trim().toUpperCase().startsWith("PANEL_TYPE ")) {
dev.setType(line.substring(11).trim());
}
}
line = reader.readLine();
if (line != null){
if (line.trim().toUpperCase().startsWith("DIMENSIONS ")) {
dev.setSize(line.substring(11).trim());
}
}
line = reader.readLine();
if (line != null){
if (line.trim().toUpperCase().startsWith("RESOLUTION ")) {
dev.setResolution(line.substring(10).trim());
}
}
line = reader.readLine();
if (line != null){
if (line.trim().toUpperCase().startsWith("INTERFACES ")) {
dev.setPorts(line.substring(10).trim());
}
}
line = reader.readLine();
if (line != null){
if (line.trim().toUpperCase().startsWith("PIECES ")) {
dev.setPieces(line.substring(7).trim());
}
}我的问题是,我如何修改代码,以便首先读取标签ITEM_TYPE,然后创建特定的项目(例如电视),然后读取所有其他标签并完成对象。txt文件中标记的顺序不是特定的,如果缺少标记,则该字段将采用默认值。下面是txt文件:
ITEM_LIST
{
ITEM
{
CODE ADLS443
ITEM_TYPE tv
MODEL IDL32KJX4300
MODEL_YEAR 2016
MANUFACTURER Samsung
PRICE 350
PANEL_TYPE LCD
DIMENSIONS 32
RESOLUTION "Full HD"
INTERFACES "HDMI USB SCART"
PIECES 43
}
ITEM
{
CODE KD444211
ITEM_TYPE tv
MODEL KDL49DDR4600
MODEL_YEAR 2014
MANUFACTURER Sony
PRICE 600
PANEL_TYPE LED
DIMENSIONS 49
RESOLUTION "Ultra HD"
INTERFACES "HDMI USB SCART Ethernet WiFi"
PIECES 8
}
ITEM
{
CODE 2445DBS41
ITEM_TYPE blueray
MODEL JVX44R32
MODEL_YEAR 2012
MANUFACTURER LG
PRICE 250
RESOLUTION 1080p
FORMAT BR-W
PIECES 12
}如果有任何关于代码的信息丢失,我很抱歉。
发布于 2016-05-12 04:45:53
简而言之,你不能。
更好的答案-读取ITEM下的所有内容,提取ITEM_TYPE,创建您想要的对象,并用其余数据填充它。
此外,您可能只想在执行reader.readLine()之后执行一次line.trim(),并且通常将代码重写为状态机,这样您就不会有那么高级别的嵌套if。
https://stackoverflow.com/questions/37172866
复制相似问题