Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式删除磅符号和双逗号java csv_Java_Regex_Csv - Fatal编程技术网

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

正则表达式删除磅符号和双逗号java csv,java,regex,csv,Java,Regex,Csv,我使用的是一个CSV文件,在某些地方有多个逗号和磅符号。我的问题是如何删除多个逗号和磅符号,同时在字段之间保留一个逗号 这个任务的一部分是,只使用java而不使用外部库来对csv文件进行排序按价格对数组进行排序。我将输入一个数字作为输入参数,并返回按价格排序的行数 我目前拥有大约1000行数据,如下所示: 18,5拉姆齐巷,见美国,samerighih@trellian.com,,£307018.48, 我需要删除双逗号和磅符号,但我的一生都无法让它工作 这是我用于正则表达式的行

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

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

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

18,5拉姆齐巷,见美国,samerighih@trellian.com,,£307018.48,
我需要删除双逗号和磅符号,但我的一生都无法让它工作

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

         String currentLine = line.replaceAll("[,{2}|£]", "");
这将输出一条如下所示的线:

100086挪威枫树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;
}
问题是,它现在删除了所有的逗号,在价格和双逗号过去的位置,它们现在连接起来了。
可能需要一些帮助来查找在每个字段之间保留一个逗号的正则表达式,以及删除磅符号。

在正则表达式中
.replaceAll(“[,{2}|]”,”)方括号创建了一个,因此这意味着“将任何字符替换为空”

您真正想要的是用一个逗号替换序列
,,,
,它将是
.replaceAll(“,,,”,”)

在java脚本中,这将是

var line=“18,5拉姆齐巷,见美国,samerighih@trellian.com,,£307018.48,";
console.log('原始行:'+行);

console.log('替换行:'+行.replace(/,,,,,,,,,)).replaceAll(“[,{2}|]”,”)中编写方括号创建a,因此这意味着“替换任何字符
{/code>,
2
”/code>、
,或
“/code>无需”

您真正想要的是用一个逗号替换序列
,,,
,它将是
.replaceAll(“,,,”,”)

在java脚本中,这将是

var line=“18,5拉姆齐巷,见美国,samerighih@trellian.com,,£307018.48,";
console.log('原始行:'+行);

console.log('替换行:'+行.replace(/,,,,,,,,,))您可以通过将CSV文件解析为二维数组并忽略由双逗号产生的空列来简化此过程。然后解析货币列是一个简单的过程:只需忽略第一个字符。

您可以通过将CSV文件解析为二维数组并忽略由双逗号生成的空列来简化此过程。然后,解析货币列很简单:只需忽略第一个字符。

尝试了正则表达式
(,)(?)
,并在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,
尝试了regex
(,)(£?
,并在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,

我认为您需要
.replaceAll((?如果您处理的是CSV,似乎很明显,双逗号实际上代表一个空字段。为什么要删除它?只需读入CSV并从中选择您的单元格。OP希望双逗号磅导致单逗号无磅,因此正则表达式替换为
.replace(,,,,,,))
@StephenP是的,问题是,为什么要使用regex?因此,它可能只是一个
.replace(“,”,”)
.replaceAll((?多个逗号,然后是Lire符号:Find
,+”
replace
我想你需要
.replaceAll()(?如果您处理的是CSV,似乎很明显,双逗号实际上代表一个空字段。为什么要删除它?只需读入CSV并从中选择单元格。OP希望双逗号磅导致单逗号无磅,因此正则表达式替换为
.replace(,,,,,,,,))
@StephenP是的,问题是,为什么要使用regex?因此,它可能只是一个
.replace(,,,,,,,”)或
.replaceAll((?多个逗号然后是Lire符号:Find
,+,
replace
当我用你建议的一行替换我的当前行时,逗号和磅符号仍然存在:.replaceAll(,,,,,,,,,,,,,,,,,);尝试将该JavaScript代码改编为在我的Java项目中工作,但不可用。当我将当前行替换为您建议的:.replaceAll(“,”,“,”);尝试将该JavaScript代码改编为在我的Java项目中工作时,逗号和磅符号仍然存在。这不是错误的。