读取具有xml内容并尝试仅写入所需内容的CSV文件。我正在使用StringTokenizer

时间:2016-07-23 23:58:34

标签: java arrays string csv stringtokenizer

在Excel文件中,行A有8000列,每列中都有xml,如下所示。所以我需要读取整个文件并只写入每列内的phoneNumber。

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 =&#39; 123456789&#39;作为输出。 SubString在我的脑海里,我也需要使用REGEX,Matchers和Patterns。有人可以帮助我吗?

1 个答案:

答案 0 :(得分: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);
        }
    }

}

我做了&#39; +&#39;可选的,所以你理论上可以处理它缺失,无论如何希望这有助于你有任何问题,我很乐意提供帮助。