Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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文件中拆分1000个数据_Java_Regex_Csv - Fatal编程技术网

Java 我需要一个正则表达式在CSV文件中拆分1000个数据

Java 我需要一个正则表达式在CSV文件中拆分1000个数据,java,regex,csv,Java,Regex,Csv,我有2个正则表达式,到目前为止我已经测试过了,但只做了我希望他们做的部分 (((?:[^,”]|“[^”]*“[^']*”)+) ,(?=([^“]*”[^“]*”*[^“]*”*[^“]*$) 下面是我想拆分的数据示例 27230419.37 27232688.95 27238409.4 27240861.92 27250176.4 27254,“1144.16” 由于它是从CSV上传的,如果数字为1000或更大,则很可能在引号内有一个逗号。我遇到的问题是,当我执行value.spli

我有2个正则表达式,到目前为止我已经测试过了,但只做了我希望他们做的部分

  • (((?:[^,”]|“[^”]*“[^']*”)+)
  • ,(?=([^“]*”[^“]*”*[^“]*”*[^“]*$)
下面是我想拆分的数据示例

  • 27230419.37
  • 27232688.95
  • 27238409.4
  • 27240861.92
  • 27250176.4
  • 27254,“1144.16”
由于它是从CSV上传的,如果数字为1000或更大,则很可能在引号内有一个逗号。我遇到的问题是,当我执行
value.split(',')时
它在引号之间分开。我希望有一个正则表达式来实现这一点,而不是一堆for循环和if语句。如果您有任何帮助,将不胜感激

(我使用的是Apex,所以它是
而不是

不要使用正则表达式,使用一个。

不要使用正则表达式,使用一个。

String input=“27254,\'1144.16\”; 列表数据=新的ArrayList(); 布尔inQuotes=false; 布尔值=假; StringBuilder buf=新的StringBuilder(); 对于(int i=0;i
String input=“27254,\“1144.16\”;
列表数据=新的ArrayList();
布尔inQuotes=false;
布尔值=假;
StringBuilder buf=新的StringBuilder();
对于(int i=0;i
用于(字符串行:行){
i++;
if(skipFirst&&i
for(字符串行:行){
i++;

如果(skipFirst&&i我不能使用它,因为我正在force.com框架内构建它。然后,可能会有帮助。我不能使用它,因为我正在force.com框架内构建它。然后,可能会有帮助。很好的示例,但它不能正确处理转义引号。@sjord感谢您的注释sjord。我修改了代码为了支持转义字符。感谢这篇文章,但我可以做得简单一点。我真的很想使用正则表达式作为概念证明。很好的例子,但它不能正确处理转义引号。@Sjoerd感谢评论Sjoerd。我修改了代码以支持转义字符。感谢这篇文章,但我我真的很想使用正则表达式作为概念证明。
String input = "27254,\"1,144.16\"";
List<String> data = new ArrayList<String>();
boolean inQuotes = false;
boolean escaped = false;
StringBuilder buf = new StringBuilder();
for (int i = 0; i < input.length(); i++){
    char c = input.charAt(i);
    if (escaped){
        buf.append(c);
        escaped = false;
    } else if (c == '\\') {
        escaped = true;
    } else if (c == '"') {
        inQuotes = !inQuotes;
    } else if (c == ',' && !inQuotes){
        data.add(buf.toString());
        buf = new StringBuilder();
    } else {
        buf.append(c);
    }
}
data.add(buf.toString());
        for(String line : lines){    
        i++;

        if(skipFirst && i <= 1) continue;
        if(isBlank(line)) return error('Line ' + i + ' blank');
        pattern regex=pattern.compile(',(?=([^"]*"[^"]*")*[^"]*$)');


            cells=regex.split(line);
            string tmp0=cells.get(1).replace('"','');


        if(cells == null || cells.size() < 2) return error('Line ' + i + ' is either blank or contains only one cell');
        code = cells.get(0);
        if(code != null) code = code.trim();
        try{
            //If the amount is empty or null, assume it is 0
            if(cells.get(1) == null || cells.get(1) == ''){
                amount = 0;
            }
            else{
              if(!cells.get(1).contains('"')){
                    amount = Decimal.valueOf(cells.get(1));
              }else{
                    string tmp=cells.get(1).replace('"','');
                    amount = Decimal.valueOf(tmp.replace(',',''));
              }

            }
        }catch(System.TypeException e){
            return error('Line ' + i + ' contains invalid amount');
        }
        values.put(code,amount);

    }