【问题标题】:Format a csv using regex使用正则表达式格式化 csv
【发布时间】:2016-05-27 08:44:16
【问题描述】:

我有一个每行 5 个数字的 csv 文件。

a line in csv:- 10003478,12228,7711479,15013889,3070120,5834262

我需要把这个字符串转换成这样的东西

expected:- 10003478,2/28/12228,4/79/7711479,8/89/15013889,1/20/3070120,2/62/5834262

在预期的输出中,“/”周围的数字是每个数字的最后三位。

例如:12228 - 后三位数字是 228,这样分开并制成 2/28/12228

【问题讨论】:

  • 解析它(opencsv.sourceforge.net),转换它,写回文件。
  • 您不是要求我们帮助您解决问题吗? :) 为什么第一个数字很特别?
  • @MinhKieu,不,我不是。只是我无法理解从哪里开始。实际上,除了上述操作之外,还需要进行一些检查。从哪里开始的指针会对我有很大帮助。第一个数字是不需要转换的特殊代码。

标签: java regex csv


【解决方案1】:

您可以使用replaceAll 方法并将其保存到一个新的字符串中:

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Main {

    public static void main(String[] args) throws IOException {
        // Read file
        Path filePath = Paths.get("file.txt");
        byte[] arr = Files.readAllBytes(filePath);
        String content = new String(arr, Charset.defaultCharset());

        // Replace
        String newContent = new String(
                content.replaceAll(",([0-9]+)([0-9]{1})([0-9]{2})", ",$2/$3/$1$2$3"));

        System.out.println(newContent);
    }
}

这会产生:

10003478,2/28/12228,4/79/7711479,8/89/15013889,1/20/3070120,2/62/5834262

【讨论】:

    【解决方案2】:

    你可以有这样的模式:

    ,((\d+)(\d)(\d{2}))
    

    然后使用replaceAll

    ,$3/$4/$1
    

    javascript 中的示例:

    console.log("10003478,12228,7711479,15013889,3070120,5834262".replace(/,((\d+)(\d)(\d{2}))/g, ",$3/$4/$1"));

    【讨论】:

      【解决方案3】:

      我不明白你为什么应该使用正则表达式。相反,您可以只读取文件并转换字符串并写回文件。下面是一个使用 OpenCsv 的示例

      import com.opencsv.CSVReader;
      import com.opencsv.CSVWriter;
      import java.io.FileReader;
      import java.io.FileWriter;
      import java.io.IOException;
      import java.util.Arrays;
      import java.util.List;
      
      
      public class JavaApplication22 {
      
         public static void main(String[] args) throws IOException { 
             String path = "C:\\Users\\uzochi\\desktop\\numbers.csv";
             CSVReader reader = new CSVReader(new FileReader(path));
             List<String[]> myEntries = reader.readAll();
      
             for(String[] s : myEntries){
                 for(int i = 1; i<=5; i++){
                    String last3 = s[i].substring(s[i].length()-3,s[i].length()); 
                    last3 = last3.charAt(0)+"/"+last3.substring(1)+"/";
                    s[i] = last3+s[i];               
                 }
                 System.out.println(Arrays.toString(s));
             }
      
             CSVWriter writer = new CSVWriter(new FileWriter(path), ','); 
             for(String[] s : myEntries){       
                writer.writeNext(s);
             }
         writer.close();
         }    
       }
      

      关于openCsv

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-15
        • 2020-09-14
        • 1970-01-01
        • 1970-01-01
        • 2023-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多