2016-07-07 41 views
0

我正在通过读取输入文件中的特定部分来制作HashMap。但是输入文件没有标准的缩进格式,即一些行以#字符开头,而有些则不行。我应该从文件中获得关键和价值。 这里是我的代码:Hash Map Key比较

String schedule = "config [\"Sql\"] = \\"; 
     Scanner scanner = new Scanner(f1); 
     while (scanner.hasNext()) { 

      sCurrentLine = scanner.nextLine(); 

      if (sCurrentLine.contains(schedule)) { 
       System.out.println(f1.getFileName()+" Contains a schedule");  
       scheduleFlag = true; 
      } 
      else if(sCurrentLine.contains("config [")) { 
       scheduleFlag = false; 
      } 
      if(sCurrentLine.trim().startsWith("(") && sCurrentLine.trim().endsWith(",") && scheduleFlag == true) { 
       scheduleName = sCurrentLine; 
       scheduleName = scheduleName.substring(scheduleName.indexOf('"')+1, scheduleName.lastIndexOf('"')); 
       //writer.write(scheduleName); 
       out.write(scheduleName.getBytes()); 
       HashMapping = true; 

      } 
      if(scheduleFlag == true && HashMapping == true) { 
       String [] values = sCurrentLine.split(":"); 

       if (values.length < 2); 
       else { 
       hm.put(values[0], values[1]); 
       } 
      } 

这里是输入文件的一部分:

#config ["Sql"] = \ 
#[ 
# ("KB", 
#  { 
#   "subsystem":    "DMN", 
#   "enabled":    "0", 
#   "freqtype":    "4", 
    } 

我只是想包括我的钥匙双引号括起来的,忽略了#字符(可能会或可能不存在于给定的文件中)。有什么办法吗?

+0

只是删除所有''#字符'str.replaceAll ('#','')' – Nikem

+1

@Nikem也许可以使用'replaceAll(“^ \\ * *”,“”)'来代替'#'在行首? –

+0

我建议你得到一个有用的文件格式。哪个软件正在导出这样的数据? – Holger

回答

1

搜索一个正则表达式的匹配来像

"[^"]*" 

你可以像遍历引号中的元素:

Pattern p = Pattern.compile("\"[^\"]*\""); 
Matcher matcher = p.matcher(yourInputString); 

while (matcher.find()) 
    { 
     //do something with the match 

    } 
+0

我没有得到你。 –

+0

你想知道什么? –

+0

您的正则表达式如何删除或忽略#字符? –

相关问题