首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分字符串并实例化对象

拆分字符串并实例化对象
EN

Stack Overflow用户
提问于 2017-09-13 02:45:59
回答 4查看 122关注 0票数 0

我想根据定义拆分一个基于字符串的消息。

代码语言:javascript
复制
    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中存在拆分消息并实例化对象的现有机制,这将是理想的。

EN

回答 4

Stack Overflow用户

发布于 2017-09-13 03:43:14

这正是substring所做的.

代码语言:javascript
复制
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,例如:

代码语言:javascript
复制
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)来实现您的方式,例如:

代码语言:javascript
复制
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"]
票数 2
EN

Stack Overflow用户

发布于 2017-09-13 03:05:18

代码语言:javascript
复制
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)

票数 0
EN

Stack Overflow用户

发布于 2017-09-13 03:30:19

首先,您在计算中犯了一个错误,下面是一些代码来完成您的工作:

代码语言:javascript
复制
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);
}

输出结果为:

代码语言:javascript
复制
AA         // 2
ABBB C     // 6
CDD        // 3
D          // 1
    FF     // 6
GGGHHHI    // 7
     KKK   // rest
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46183448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档