Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拆分字符串并实例化对象_Java_Spring_Java 8 - Fatal编程技术网

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
s
substring()
方法来打印,但我认为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
s
substring()
方法进行打印,但我认为OP希望对更新的
字符串执行
substring()
操作。因为
StringBuilder
是可变的,所以我使用它而不是创建额外的
字符串
变量。