我有一串逗号分隔值,初始字符串可以包含任意数量的逗号分隔值。我需要以这样的方式创建一个程序,这样如果字符串中有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;
}
请帮我解决这个问题。
答案 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)
对你而言,这应该不是什么难事
如果您对第三方库开放,通过使用,例如,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);
}
}