Регулярное выражение для удаления знака фунта и двойных запятых - PullRequest
0 голосов
/ 19 мая 2018

Я работаю с 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 голосов
/ 19 мая 2018

Вы можете упростить это, проанализировав файл CSV в двумерном массиве и проигнорировав пустой столбец, который является результатом двойной запятой.Затем анализ столбца валюты очень прост: просто игнорируйте первый символ.

0 голосов
/ 21 мая 2018

Попробовал регулярное выражение (,,)(£)? и протестировал его в ideone: Пожалуйста, найдите код ниже:

import java.util.*;
import java.lang.*;
import java.io.*;
        import java.util.regex.Matcher;
import java.util.regex.Pattern;


/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {

final String regex = "(,,)(£)?";
final String string = "18,,5 Ramsey Lane,,See,Amerighi,,samerighih@trellian.com,,£307018.48,,\n"
     + "18,,5 Ramsey Lane,,See,Amerighi,,samerighih@trellian.com,,£307018.48,,\n"
     + "18,5 Ramsey Lane,,See,Amerighi,,samerighih@trellian.com,,£307018.48,,\n"
     + "18,,5 Ramsey Lane,,See,Amerighi,,samerighih@trellian.com,,£307018.48,,";
final String subst = ",";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println("Substitution result: " + result);
    }
}

Вывод:

Substitution result: 18,5 Ramsey Lane,See,Amerighi,samerighih@trellian.com,307018.48,
18,5 Ramsey Lane,See,Amerighi,samerighih@trellian.com,307018.48,
18,5 Ramsey Lane,See,Amerighi,samerighih@trellian.com,307018.48,
18,5 Ramsey Lane,See,Amerighi,samerighih@trellian.com,307018.48,
0 голосов
/ 19 мая 2018

В вашем регулярном выражении .replaceAll("[,{2}|£]", ""); в квадратных скобках создается класс символов , поэтому это означает "заменить любые символы ,, {, 2, }, | или £ с ничем".

Что вам действительно нужно, так это заменить последовательность ,,£ на одну запятую, которая будет .replaceAll(",,£", ",")

В java script это было бы ...

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

обновление

Преобразование этого в Java в качестве отдельной тестовой программы, чтобы продемонстрировать, что это делает работа, я получаю следующее:

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);
    }
}

Запуск этого ...

$ javac so50419207.java ; java so50419207
original string: 18,5 Ramsey Lane,See,Amerighi,samerighih@trellian.com,,£307018.48,
replaced string: 18,5 Ramsey Lane,See,Amerighi,samerighih@trellian.com,307018.48,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...