在实现阿里云推送的时候需要根据用户Id进行推送,然而拿到同事给出的数据却懵逼了,因为阿里云每次推送只能有10个用户Id,所以需要实现一个字符串分页。
同事给出数据 4,16,34,36,125,201,70665,70697,80758,80761,80765,80789 ..........
思路
- 1 遍历字符串,并记录每一个逗号的下标,保存在数组中
- 2 遍历每一个逗号的位置,当下标等于页数大小时进行截取存储数组中,并记录下一次截取的位置
import java.util.ArrayList;
import java.util.List;
public class PageUtil {
public static void main(String[] args) {
List<String> stringPaging = stringPaging(5);
for (String string : stringPaging) {
System.out.println(string);
}
}
/**
* @param pageSize 每页的个数
* @return
*/
public static List<String> stringPaging(int pageSize){
String strings="4,16,34,36,125,201,70665,70697,80758,80761,80765,80789";
List<String> strList=new ArrayList<>();
/**
* 获取每一个 逗 号 下标
* */
List<Integer> strIndexList = getIndex(strings, ",");
/**
* 如果小于需要分页的数量
* **/
if(strIndexList.size()<pageSize){
strList.add(strings);
}else{
/**
* 截取的开始位置
* */
int index=0;
/**
* 每页的个数
* */
int size=pageSize;
for (int i = 0; i < strIndexList.size(); i++) {
/**
* 到达截取的位置
* */
if((i+1)==size) {
/** 截取 */
strList.add(strings.substring(index,strIndexList.get(i)));
/** 记录下一次开始截取的下标 */
index=strIndexList.get(i)+1;
/** 记录下一个位置 */
size=size+pageSize;
/** 如果截取的位置已经超出*/
if(size>strIndexList.size()) {
strList.add(strings.substring(index,strings.length()));
}
}
}
}
return strList;
}
/**
* 获取 指定字符串的下标
* @param strings
* @param str
* @return
*/
public static List<Integer> getIndex(String strings, String str){
List<Integer> indexList=new ArrayList<>();
int strIndex=0;
while (strings.indexOf(str)!=-1){
/**
* 截取包含自身在内的前边部分
* */
String front= strings.substring(0,strings.indexOf(str)+str.length());
/**
* 记录长度位置
* */
strIndex=strIndex+front.length();
/**
* 添加到集合中
* */
indexList.add(strIndex-str.length());
/**
* 获取完成后,剔除
* */
strings=strings.substring(strings.indexOf(str)+str.length());
}
return indexList;
}
}
执行结果:
QQ截图20171223125630.png
网友评论