Java-创建逗号分隔值的批处理

Java-创建逗号分隔值的批处理,java,regex,string,csv,Java,Regex,String,Csv,我有一个逗号分隔值字符串,初始字符串可以包含任意数量的逗号分隔值。我需要以这种方式创建一个程序,这样,如果一个字符串中有100个逗号分隔的值,那么我可以得到5个不同的字符串,每个字符串包含20个逗号分隔的值。类似地,如果初始字符串中有200个逗号分隔的值,那么我可以得到10个字符串,每个字符串有20个逗号分隔的值 以下是我为获得csv计数所做的工作: public int getCSVCount(String CSV) { String[] CSVArray = CSV.split("

我有一个逗号分隔值字符串,初始字符串可以包含任意数量的逗号分隔值。我需要以这种方式创建一个程序,这样,如果一个字符串中有100个逗号分隔的值,那么我可以得到5个不同的字符串,每个字符串包含20个逗号分隔的值。类似地,如果初始字符串中有200个逗号分隔的值,那么我可以得到10个字符串,每个字符串有20个逗号分隔的值

以下是我为获得csv计数所做的工作:

public int getCSVCount(String CSV) {

    String[] CSVArray = CSV.split(",");
    int number;
    if(CSV == null || CSV.isEmpty()){
        number = 0;
    }else{
        number = CSVArray.length;
    }
    return number;
}
请帮我解决这个问题

public String[] getString(String CSV) {

    String[] output ;
    String[] CSVArray = CSV.split(",");
    int number;
    if(CSV == null || CSV.isEmpty()){
        number = 0;
    }else{
        number = CSVArray.length;
    }

    Int count = 1;
    Int j = 0;
    for (int i : CSVArray)
    {
        if (count >20)
        {
            j = j+ 1;
            count = 0;
        }
        output[j] = output[j] + ","+ CSVArray[i];
    }

    return output;
}
下面是一个简单的例子我没有执行它。

我的假设是,您想要一个包含20个逗号分隔值的字符串

如果计数为100,那么您将拥有5个字符串的数组,大小为20个逗号分隔的值


以上内容将帮助您

在这里,您可以进行所有测试和工作

import java.util.ArrayList;

public class test {

    ArrayList<String> stringOf100 = new ArrayList<String>();
    ArrayList<String> stringOf200 = new ArrayList<String>();

    public test() {


        for (int i = 1; i <= 200; i++) {
        stringOf200.add(i + ",");
    }

    for (int i = 1; i <= 100; i++) {
        stringOf100.add(i + ",");
    }

    stringOf100.size(); // = 100

    for (String string : stringOf100) {
        System.out.println(string);
    }
    /* prints this.
    1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 
    26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 
    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 
    78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100
    */

    filter(stringOf100);
//      filter(stringOf200);



}

    private void filter(ArrayList<String> strings) {
        int outputCommaValues = 20; //as i understood this is a constant of 20.  "different strings each containing 20 comma separated values."
        int outputStrings = strings.size() / outputCommaValues; //5 or 10 or 5/100 = 0.05 -> 0.05*strings.size if strings.size = 100 -> 0.05*100 = 5 if strings.size = 200 -> 0.05*200 = 10. not sure what you want this to be

        ArrayList<String> output = new ArrayList<String>();

        StringBuilder sb = new StringBuilder();

        int c = 0;
        for (int i = 1; i <= outputStrings; i++) { 
            for (int j = 1; j <= outputCommaValues; j++) {
                if (strings.get(c) != null) {
                    sb.append(strings.get(c));
                    c++;
                } 
            }
            output.add(sb.toString());
            sb.delete(0, sb.length());
        }

        System.out.println(" c: " + c);
        System.out.println(" size: " + output.size());

        for (String string : output) {
            System.err.println(string);
        }

        /* stringOf100 outputs 5 strings:
         1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,            
         21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,   
         41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,   
         61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,   
         81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,  
         */


        /* stringOf200 outputs 10 strings:
         1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
         21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,
         41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
         61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
         81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,
         101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,
         121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,
         141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,
         161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,
         181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,
     */

    }

}
import java.util.ArrayList;
公开课考试{
ArrayList StringO100=新的ArrayList();
ArrayList StringO200=新的ArrayList();
公开考试(){
对于(int i=1;i 0.05*100=5,如果strings.size=200->0.05*200=10。不确定您希望它是什么
ArrayList输出=新的ArrayList();
StringBuilder sb=新的StringBuilder();
int c=0;

对于(inti=1;i来说,你应该不难理解

  • 用逗号分隔字符串
  • 对于每20个字符串,使用逗号连接它们,并将其放入结果数组/列表中
  • 如果您对第三方lib持开放态度,例如,通过使用apachecommons集合+Commons Lang将使任务变得非常简单

    psuedo代码:

    List<List<String>> csvValueGroups = ListUtils.partition(Arrays.asList(csv.split(',')), 20);
    List<String> result = new ArrayList<String>(csvValueGroups.size());
    for (List<String> group : csvValueGroups) {
        result.add(StringUtils.join(group, ","));
    }
    
    List csvValueGroups=ListUtils.partition(Arrays.asList(csv.split(',')),20);
    列表结果=新的ArrayList(csvValueGroups.size());
    对于(列表组:CSVValue组){
    添加(StringUtils.join(组“,”);
    }
    
    未选中代码

    final String SEPERATOR  = " ";
    List<String> strings = new      ArrayList<>();
    StringBulder builder;
    for(int i =0; i<number ;i++){
    if((i % 20) ==0){
    if(i!=0){
    strings.add(builder.toString());
    }
    builder = new StringBuilder();
    }
    builder.append(CSVArray[i]);
    /* If (i+1) %20 is zero it means it is the last string in this 20 we dont want aeperatot after it */if((i+1)%20) !=0){
    builder.append(SEPERATOR);
    }
    }
    
    final String separator=”“;
    列表字符串=新的ArrayList();
    架线机;
    
    对于(int i=0;i字符串中允许的字符是什么?我这样做是为了检查您是否需要类似的东西。我将25个字母分成5组。因此,匹配项的数量为5,每个都有5个csv值。在拆分字符串之前,您应该检查null/空。否则,如果字符串为null,您将得到NPE。请注意n你的变量命名伤害了我的眼睛,那么数组包含103个逗号呢?你应该得到什么?加上一个空检查。