【问题标题】:Java - csv read and rewrite part error - where to set cmd part 3?Java - csv 读取和重写部分错误 - 在哪里设置 cmd 第 3 部分?
【发布时间】:2015-10-02 06:16:03
【问题描述】:

有一个错误,第 3 部分需要设置在另一行。
我无法找到错误的原因。
我需要在哪里设置 part3 行来解决这个问题?

import java.io.*;                      

public class javadruckdruckextended {

    public static void main(String[] args) throws IOException {
        //scanning
        FileReader fr = new FileReader ("fax_user.csv");
        BufferedReader br = new BufferedReader (fr);
        FileWriter fw = new FileWriter("Druckausgabe123.txt");
        BufferedWriter bw = new BufferedWriter (fw);
        String textnow = br.readLine ();
        String n = System.getProperty("line.separator");

        while (textnow !=null) {
            //Umlaute gegen ae,oe,ue tauschen
            String text = textnow;          
            String textXreplaced = text;
            textXreplaced = text.replace ("ä","ae");
            String textXXreplaced = textXreplaced;
            textXXreplaced = textXreplaced.replace ("ü","ue");
            String textXXXreplaced = textXXreplaced;
            textXXXreplaced = textXXreplaced.replace ("ö","oe");
            String textXXXXreplaced = textXXXreplaced.replace("ß","ss");
            textXXXXreplaced = textXXXreplaced;

            //Text umformatieren, splitten, E-Mail, Nummer anhängen
            String textreplaced = textXXXXreplaced.replace(" ", "");
            String textreplacedtwo = textreplaced.replace("\"","");
            String textreplacedthree = textreplacedtwo.replace(";","");
            String textreplacedfour = textreplacedthree.replace(".",","); // Um das "Dr." bei Friedbert Maas wegzusplitten. 

            String [] parts = textreplacedfour.split(",");

            /* Zur Fehlerkontrolle  
             *  if (parts.length<3) { System.out.println(textnow);}
             * else { 
             */      
             String Email = "@bogestra.de";                      
             String Zahlen = ";3";                                
             String part1 = parts[0];                           
             String part2 = parts[1];                  
             String part3 = parts[2];

             if (parts.length < 2){ 
                 String Sonderfalleins = part2 + Email + Zahlen + part1;
                 bw.write (Sonderfalleins);  
             } //close if
             else {
                 if  (parts.length > 3) {
                     String part4 = parts[3]; 
                     String Sonderfallzwei = part3 + "." + part4 + Email + Zahlen + part1;
                     bw.write (Sonderfallzwei);
                 } //close if
                 else {     
                     String part3zwei = parts[2]; //vielleicht Entfernung                           
                     String finished  = part3zwei + "." + part2 + Email + Zahlen + part1;
                     textnow = br.readLine();
                     bw.write(finished + n );
                     bw.flush();
                 } //close else 2       
             }//close else 1
         } //close while

         textnow = br.readLine();
         bw.flush();
         bw.close(); 
         br.close(); 

    } //close static void main String                                            
} //close class

【问题讨论】:

  • 存在“错误”。你可以再详细一点吗?请理解,当涉及逻辑时,我们不知道您的代码应该做什么。
  • 您的问题很可能是您这样做: String part3 = parts[2];在验证数组中是否存在第三个元素之前。
  • 对不起:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 2 at javadruckdruckextended.main(javadruckdruckextended.java:54)
  • 那么问题确实是,您正试图从只有两个元素的数组中获取第三个元素。只有在验证数组中至少有三个元素时才应该进行该分配(=parts[2])
  • 您已经将该检查代码注释掉了 (Zur Fehlerkontrolle ...),它不是已经告诉您这个问题了吗?顺便说一句,我会删除/屏蔽此处发布的代码中的域名或名称(Datenschutz)。

标签: java excel csv


【解决方案1】:

这里的分配和长度检查显然是乱序的:

    String part1 = parts[0];
    String part2 = parts[1];
    String part3 = parts[2];

    if (parts.length < 2) {
        String Sonderfalleins = part2 + Email + Zahlen + part1;
        bw.write(Sonderfalleins);
    } else {
        if (parts.length > 3) {
            String part4 = parts[3];
            String Sonderfallzwei = part3 + "." + part4 + Email + Zahlen + part1;
            bw.write(Sonderfallzwei);
        } //close if

也就是说,您在检查 parts[1] 是否确实存在之前引用它。 如果parts.length &lt; 2parts[1] 将抛出ArrayIndexOutOfBoundsExceptionparts[3] 也是如此。

这是一种可能的简单解决方法:

    String part1 = parts[0];

    if (parts.length < 2) {
        String part2 = parts[1];
        String Sonderfalleins = part2 + Email + Zahlen + part1;
        bw.write(Sonderfalleins);
    } else {
        if (parts.length > 3) {
            String part3 = parts[2];
            String part4 = parts[3];
            String Sonderfallzwei = part3 + "." + part4 + Email + Zahlen + part1;
            bw.write(Sonderfallzwei);
        } //close if

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-13
    • 2013-07-30
    • 1970-01-01
    • 2012-09-29
    • 2016-12-24
    • 2014-02-02
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多