Java - 创建一批逗号分隔值

时间:2016-03-10 05:23:10

标签: java regex string csv

我有一串逗号分隔值,初始字符串可以包含任意数量的逗号分隔值。我需要以这样的方式创建一个程序,这样如果字符串中有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;
}

请帮我解决这个问题。

4 个答案:

答案 0 :(得分:1)

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个逗号分隔值

以上将帮助您

答案 1 :(得分:0)

在这里,你进行了所有测试和工作

DECLARE @EmpId AS Varchar(20),
  @CompanyId as VARCHAR(20),
  @DepartmentId AS VARCHAR(20),
  @DesignationId AS VARCHAR(20),
  @GradeId AS VARCHAR(20),
  @FromDate AS DATE,
  @TillDate AS DATE 



Set @EmpId=null
SET @CompanyId= NULL
SET @DepartmentId=NULL
SET @DesignationId=NULL
SET @GradeId=NULL
SET @FromDate='1-1-2015'
SET @TillDate='1-1-2016';

with LeaveApprovalCTE as
(
Select 
  AT.IsPaid as 'IsPaid',
  AT.AttendanceTypeCode, (select distinct IsPaid from LeaveApproval where empid=LA.EmpId) as 'testPAID',
 CASE WHEN AT.IsPaid=1 Then 1 END as Paid,
CASE WHEN AT.IsPaid=0 Then AT.AttendanceTypeCode  END as UnPaid,
 AT.AttendanceTypeCode AS LeaveCount
 From 
LeaveApproval LA
INNER JOIN AttendanceTypes AT ON LA.AttendanceTypeId = AT.AttendanceTypeId
INNER JOIN EmpMaster EM ON LA.Empid = EM.EmpId 

WHERE
EM.ActiveInActive <> 1 AND 
EM.EmpId  = CASE WHEN ISNULL(@EmpId ,'-1') <> '-1' AND @EmpId <> '' THEN   @EmpId ELSE EM .EmpId END
AND
EM.CompanyId = CASE WHEN ISNULL(@CompanyId ,'-1') <> '-1' AND @CompanyId <>     '' THEN @CompanyId ELSE EM .CompanyId END
AND
EM.DepartmentId = CASE WHEN ISNULL(@DepartmentId,'-1') <> '-1' AND   @DepartmentId<> '' THEN @DepartmentId ELSE EM .DepartmentId END
AND
ISNULL(EM.DesignationId,'')  = CASE WHEN ISNULL(@DesignationId ,'-1') <>  '-1' AND @DesignationId <> '' THEN @DesignationId ELSE ISNULL(EM   .DesignationId,'') END
AND
ISNULL(EM.GradeId,'')  = CASE WHEN ISNULL(@GradeId ,'-1') <> '-1' AND    @GradeId <> '' THEN @GradeId ELSE ISNULL(EM .GradeId,'') END
AND
FromDate BETWEEN @FromDate AND  @TillDate
)

Select 
AttendanceTypeCode,
 SUM(Paid) as paid ,
COUNT(UnPaid) as unpaid,
COUNT(LeaveCount) AS LeaveCount

from LeaveApprovalCTE

Group By AttendanceTypeCode,IsPaid,Paid,UnPaid

答案 2 :(得分:0)

对你而言,这应该不是什么难事

  1. 用逗号分隔字符串
  2. 每20个字符串,使用逗号连接它们,并将其放入结果数组/列表
  3. 如果您对第三方库开放,通过使用,例如,Apache Commons Collections + 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, ","));
    }
    

答案 3 :(得分:0)

未检查代码

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