Java 拆分字符串并实例化对象
我想根据定义拆分基于字符串的消息Java 拆分字符串并实例化对象,java,spring,java-8,Java,Spring,Java 8,我想根据定义拆分基于字符串的消息 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中存在一种分割消息并实例化对象的机制,这将是理想的
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中存在一种分割消息并实例化对象的机制,这将是理想的
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
,每次获得子字符串后都会删除子字符串。
使用子字符串(int start,int end)
方法和删除(int start,int end)
使用StringBuilder
,每次获得子字符串后都会删除子字符串。
使用
子字符串(int start,int end)
方法和删除(int start,int end)
首先,您在计数时出错,下面是一些代码:
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);
}
首先,您在计数时出错,下面是一些代码:
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);
}
这是我的版本
String str = "AAABBB CCDDD FFGGGHHHI KKK";
List<Integer> def = Arrays.asList(2,6,3,1,6,7);
List<String> res = split (str, def);
int n = res.size();
for (int i = 0; i < n; i ++) {
String r = res.get(i);
if (i + 1 == n) {
System.out.println("rest: " + r);
} else {
System.out.println(r.length() + " : " + r);
}
}
public List<String> split (String pStr, List<Integer> pDef) {
List<String> ret = new ArrayList<String> ();
int startStr = 0;
int startDef = 0;
while (startStr < pStr.length() && startDef < pDef.size()) {
int end = startStr + pDef.get(startDef);
ret.add(pStr.substring(startStr, end));
startStr = end;
startDef ++;
}
if (startStr < pStr.length()) {
ret.add(pStr.substring(startStr));
}
return ret;
}
这是我的版本
String str = "AAABBB CCDDD FFGGGHHHI KKK";
List<Integer> def = Arrays.asList(2,6,3,1,6,7);
List<String> res = split (str, def);
int n = res.size();
for (int i = 0; i < n; i ++) {
String r = res.get(i);
if (i + 1 == n) {
System.out.println("rest: " + r);
} else {
System.out.println(r.length() + " : " + r);
}
}
public List<String> split (String pStr, List<Integer> pDef) {
List<String> ret = new ArrayList<String> ();
int startStr = 0;
int startDef = 0;
while (startStr < pStr.length() && startDef < pDef.size()) {
int end = startStr + pDef.get(startDef);
ret.add(pStr.substring(startStr, end));
startStr = end;
startDef ++;
}
if (startStr < pStr.length()) {
ret.add(pStr.substring(startStr));
}
return ret;
}
这正是
然后您可以使用split(String,String)
实现您的方法,例如:
static String[] split(String source, String sizes){
return split(source, Arrays.stream(sizes.split(","))
.mapToInt(it -> it.equals("rest") ? -1 : Integer.parseInt(it))
.toArray());
}
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"]
这正是
然后您可以使用split(String,String)
实现您的方法,例如:
static String[] split(String source, String sizes){
return split(source, Arrays.stream(sizes.split(","))
.mapToInt(it -> it.equals("rest") ? -1 : Integer.parseInt(it))
.toArray());
}
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"]
整个
StringBuilder
操作的可能重复项的可能重复项已过时,因为您可以直接在原始字符串上执行子字符串
,只需调整偏移量而不是删除内容,string s=“AAABBB CCDDD FFGGGHHHI KKK”;System.out.println(s.substring(0,2));System.out.println(s.substring(2,8))代码>。您甚至可以首先打印子序列,System.out.append(s,0,2).append('\n').append(s,2,8).println()
…是的,我们可以使用String
ssubstring()
方法来打印,但我认为OP想要对更新的String
执行substring()
操作。由于StringBuilder
是可变的,因此我使用它而不是创建额外的String
变量。整个StringBuilder
操作已经过时,因为您可以直接对原始字符串执行substring
,只需调整偏移量而不是删除内容,String s=“AAABBB CCDDD FFGGGHHHI KKK”;System.out.println(s.substring(0,2));System.out.println(s.substring(2,8));
。您甚至可以首先打印子序列,System.out.append(s,0,2).append('\n')。append(s,2,8).println();
…是的,我们可以使用String
ssubstring()
方法进行打印,但我认为OP希望对更新的字符串执行substring()
操作。因为StringBuilder
是可变的,所以我使用它而不是创建额外的字符串
变量。