首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:如何通过限制字符串中的字符数来拆分带有分隔符的字符串?

Java:如何通过限制字符串中的字符数来拆分带有分隔符的字符串?
EN

Stack Overflow用户
提问于 2019-04-27 06:06:23
回答 3查看 415关注 0票数 0

我有一个场景,我必须拆分一个字符串(它有逗号分隔值),限制字符串中的最大字符数,同时保持逗号分隔的格式。

例如,String str = "test,et,ste,ts,tst,est,ste,tstete,sts,tet,estst,tet"

假设一个字符串的最大字符数可以是10,那么我的输出应该是:

代码语言:javascript
复制
test,et (7 chars)
ste,ts,tst (10 chars)
est,ste (7 chars)
tstete,sts (10 chars)
tet,estst (9 chars)
tet (3 chars)

基本上,输出将被循环并附加到查询中的IN子句中,但是in子句只能处理(最大字符数),因此在字符串长度超过限制的情况下拆分字符串(表示全逗号分隔值)。

EN

回答 3

Stack Overflow用户

发布于 2019-04-27 07:34:07

您可以这样做(请查看注释以获得解释):

代码语言:javascript
复制
public static void main(String[] args) {
    String str = "test,et,ste,ts,tst,est,ste,tstete,sts,tet,estst,tet";

    // Split it first
    String words[] = str.split(",");

    // Use a buffer
    StringBuffer sb = new StringBuffer("");

    List<String> result = new ArrayList<>();

    String delim = "";

    // Iterate through the words. 
    for(int i = 0; i< words.length; i++) {
        // You will add the comma so total length should be less 
        // than 10.
        if(sb.length() + words[i].length() < 10) {
            sb.append(delim);
            sb.append(words[i]);
            delim = ",";
        }
        else {
            delim = "";
            result.add(sb.toString());
            System.out.println(sb.toString());
            sb = new StringBuffer(words[i]);
            delim = ",";
        }
    }

    // Print to check the results
    for(String s: result) {
        System.out.println(s);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2019-07-11 05:49:12

这个任务很棘手--下面的lambda表达式解决了这个问题

代码语言:javascript
复制
comma = false; // class boolean variable
last = 0;      // class int variable

Stream.of( str.split( "," ) ).collect(
  Collector.of( () -> new StringBuilder(),
    (buf, s) -> {
      if( buf.length() - last + s.length() < 10 ) {
        buf.append( comma ? "," : "" ).append( s );
        comma = true;
      }
      else {
        int len = buf.length();
        buf.append( " (" ).append( len - last ).append( " chars)\n" );
        last = buf.length();
        buf.append( s );
      }
    },
    (buf1, buf2) -> null,  // unused
    buf -> {
      int len = buf.length();
      return( buf.append( " (" ).append( len - last ).append( " chars)\n" ).toString() );
    } ) );

如果没有(…字符)-explanation:

代码语言:javascript
复制
Stream.of( str.split( "," ) ).collect(
  Collector.of( () -> new StringBuilder(),
    (buf, s) -> {
      if( buf.length() - last + s.length() < 10 ) {
        buf.append( comma ? "," : "" ).append( s );
        comma = true;
      }
      else {
        buf.append( '\n' );
        last = buf.length();
        buf.append( s );
      }
    },
    (buf1, buf2) -> null,  // unused
    buf -> {
      return( buf.append( '\n' ).toString() );
    } ) );

所需的输出以字符串…的形式返回

票数 0
EN

Stack Overflow用户

发布于 2019-04-27 07:39:35

我会这样做:

  1. 用逗号拆分输入字符串。你会得到一个包含单个字符串的数组,例如,一个存储输出的临时字符串变量,例如对数组执行out = ""
  2. loop,例如for(int i = 0; i< arr.length; i++)
  3. within循环:如果输出的长度加上当前数组条目的长度小于10,则将当前数组条目添加到输出,否则打印输出,重置输出并继续,例如if (out.length + arr[i].length < 10) {out += ","+arr[i];} else {print out; out = "";}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55875435

复制
相关文章

相似问题

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