我想根据定义拆分一个基于字符串的消息。
String: AAABBB CCDDD FFGGGHHHI KKK
Definition: 2,6,3,1,6,7,rest
So,
2 AA
6 ABBB C
3 CDD
1 D
6 F
7 FGGGHHH
rest I KKK理想情况下,如果java或spring中存在拆分消息并实例化对象的现有机制,这将是理想的。
发布于 2017-09-13 03:43:14
这正是substring所做的.
static String[] split(String source, int ... sizes){
int n = source.length(), start = 0;
String [] partials = new String[sizes.length];
for(int i = 0; i < sizes.length; i++){
int end = sizes[i] < 0 ? n : start + sizes[i];
partials[i] = source.substring(start, start = end);
}
return partials;
}您需要做的一件事是将rest转换为-1,例如:
static String[] split(String source, String sizes){
return split(source, Arrays.stream(sizes.split(","))
.mapToInt(it -> it.equals("rest") ? -1 : Integer.parseInt(it))
.toArray());
}然后,您可以使用split(String, String)来实现您的方式,例如:
String string = "AAABBB CCDDD FFGGGHHHI KKK";
String definition = "2,6,3,1,6,7,rest";
String[] results = split(string, definition);
// ^--- ["AA", "ABBB C", "CDD", "D", " FF", "GGGHHHI", " KKK"]发布于 2017-09-13 03:05:18
StringBuilder temp=new StringBuilder("AAABBB CCDDD FFGGGHHHI KKK");
System.out.println(temp.substring(0,2));
temp.delete(0,2);
System.out.println(temp.substring(0,6));
temp.delete(0,6);
//it goes like this使用StringBuilder,每次获得子字符串后都会删除子字符串。使用substring(int start, int end)方法和delete(int start, int end)
发布于 2017-09-13 03:30:19
首先,您在计算中犯了一个错误,下面是一些代码来完成您的工作:
public static void main(String[] args) {
String str = "AAABBB CCDDD FFGGGHHHI KKK";
int[] split = new int[]{2, 6, 3, 1, 6, 7};
List<String> res = new ArrayList<>();
StringBuilder temp = new StringBuilder(str);
for (int i = 0; i < split.length ; i++) {
res.add(temp.substring(0, split[i]));
temp.delete(0, split[i]);
}
res.add(temp.toString());
res.forEach(System.out::println);
}输出结果为:
AA // 2
ABBB C // 6
CDD // 3
D // 1
FF // 6
GGGHHHI // 7
KKK // resthttps://stackoverflow.com/questions/46183448
复制相似问题