2016-07-23 19 views
0

在Excel文件中,行A有8000列,每列都有xml,如下所示。因此,我需要读取整个文件并只写入每列中的phoneNumber。正在读取具有xml内容并尝试只写需要的内容的CSV文件。我正在使用StringTokenizer

OutputElements: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:xxxxxxxx xmlns:ns2="http://webservice.com/"><ns2:xxxxxxx><ns2:xxxxxx>&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;xxxxxxxx;&lt;xxxxxxxxxx keyword="TEXT" phoneNumber="+123456789" pinNumber=123456 /&gt;&lt;/xxxxxxxxxxx&gt;&lt;;</ns2:xxxxxxxxx><ns2:messageType>xxxxxxxxxxxxxxxx</ns2:messageType><ns2:xxxxxxx>3456</ns2:xxxxxxx><ns2:id>xxxxxxx</ns2:id></ns2:xxxxxxxx></ns2:xxxxxxxxx> 

我的代码:

BufferedReader reader = new BufferedReader(new FileReader(file)); 
    String line = null; 
    String isPhoneNumber ="phoneNumber="; 

     while((line = reader.readLine()) != null){ 
     Matcher matcher = pattern.matcher(isPhoneNumber); 
     StringTokenizer st = new StringTokenizer(line,""); 
     while(st.hasMoreElements() || matcher.equals(isPhoneNumber)){ 
      System.out.println("OutputElements: " +st.nextElement()); 
       } 


     } 
     reader.close(); 

我在读文件。我只需要输出phoneNumber ='123456789'作为输出。 SubString在我心中,我也需要使用REGEX,Matchers和Patterns。有人能帮我吗?

+0

如果它是一个xml那么你为什么不使用解析器,是否比这更重。 – xTroy

+0

在Excel文件中,行A有8000列,每列都有xml。因此,我需要读取整个文件并只写入phoneNumber。 – VBR

回答

0

除了正则表达式,你不会错过代码。我建议只使用一个模式,匹配检索数据,而不是子,继承人一个工作样本您:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.StringTokenizer; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

/** 
* 
* @author dean2191 
*/ 
public class JavaApplication6 { 


    public static void main(String[] args) { 
     try { 
      BufferedReader reader = new BufferedReader(file)); 
      String line = null; 
      String isPhoneNumber ="phoneNumber=\"\\+?[0-9]+\""; 

      while((line = reader.readLine()) != null){ 
       Pattern pattern = Pattern.compile(isPhoneNumber); 
       Matcher matcher = pattern.matcher(line); 
       StringTokenizer st = new StringTokenizer(line,""); 
       int count=0; 
       while(matcher.find()){ 
          count++; 
        System.out.println("Match number " 
           + count); 
      System.out.println(matcher.group()); 

       } 


      } 
      reader.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(JavaApplication6.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

} 

我做了“+”可选的,所以理论上你可以用它为缺处理,反正希望这有助于如果你有任何问题,很乐意提供帮助。

+0

非常感谢。 – VBR

相关问题