我正在使用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;
}
问题是它现在删除了所有逗号以及价格和双逗号曾经的位置,它们现在连接了。 可以使用一些帮助找到一些正则表达式,在每个字段之间保留一个逗号,以及删除井号。
答案 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
输出:
(,,)(£)?