正则表达式删除井号和双逗号java csv

时间:2018-05-18 21:00:17

标签: java regex csv

我正在使用CSV文件,在某些地方,有多个逗号和井号。我的问题是如何删除多个逗号和井号,同时在字段之间留下一个逗号。

我正在进行的这项任务的一部分是,仅使用java而没有外部库对csv文件进行排序,按价格对数组进行排序。我将输入一个数字作为输入参数并返回按行价排序的行数。

我目前拥有大约1000行数据,如下所示:

18,5 Ramsey Lane,See,Amerighi,samerighih@trellian.com,,£307018.48,

我需要删除双逗号和英镑符号,但是因为我的生活无法让它工作。

这是我用于正则表达式的行。

         String currentLine = line.replaceAll("[,{2}|£]", "");

这会输出如下所示的行:

100086 Norway Maple WayMadelleGeorgeotmgeorgeotrr@hao13.com417175.60

更大的代码块看起来像这样,绝不是它几乎完成了:

  public String[] getTopProperties(int n){
    String[] properties = new String[n];
    String file = "data.csv";
    String line = "";
    String splitBy = ",";

    try (BufferedReader br = new BufferedReader(new FileReader(file))) {

        while ((line = br.readLine()) != null) {

          String currentLine = line.replaceAll("[,{2}|£]", "");

          System.out.println("Current line is: " + currentLine);
            String[] user = currentLine.split(splitBy);
           }
      } catch (IOException e) {
        e.printStackTrace();
      }

    return properties;
}

问题是它现在删除了所有逗号以及价格和双逗号曾经的位置,它们现在连接了。 可以使用一些帮助找到一些正则表达式,在每个字段之间保留一个逗号,以及删除井号。

3 个答案:

答案 0 :(得分:2)

在正则表达式.replaceAll("[,{2}|£]", "");中,方括号会创建 character class ,因此这意味着"替换任何字符,,{{1} },{2}| nothing "。

您真正想要的是用一个逗号替换序列 £,这将是,,£

在java script 中,这将是......



.replaceAll(",,£", ",")




<强>更新

将此转换为Java作为独立的测试程序,以证明此 工作,我得到以下结果:

var line="18,5 Ramsey Lane,See,Amerighi,samerighih@trellian.com,,£307018.48,";
console.log('   original line: ' + line);
console.log('replacement line: ' + line.replace(/,,£/, ","));

运行此...

public class so50419207
{
    public static void main(String... args)
    {
        String input = "18,5 Ramsey Lane,See,Amerighi,samerighih@trellian.com,,£307018.48,";
        String replaced = input.replace(",,£", ",");
        System.out.println("original string: " + input);
        System.out.println("replaced string: " + replaced);
    }
}

答案 1 :(得分:2)

您可以通过将CSV文件解析为2D数组并忽略由双逗号产生的空列来简化此操作。然后解析货币列是一个快照:只需忽略第一个字符。

答案 2 :(得分:0)

尝试了正则表达式n_calls并在ideone中对其进行了测试: 请找到以下代码:

int

输出:

(,,)(£)?