【问题标题】:How do i split a string every five characters using loops? [duplicate]如何使用循环每五个字符拆分一个字符串? [复制]
【发布时间】:2021-02-10 09:11:50
【问题描述】:

假设我有一个字符串:“VJKUKUTGCNNAUVWRKF” 我怎样才能使用循环来代替它 每隔一段时间有空白的"VJKUK UTGCN NAUVW RKF" 五个字符(注意最后一部分只有三个字符)。

【问题讨论】:

标签: java regex string


【解决方案1】:

@Aharon 已经为您提供了一个很好的解决方案,但是当字符串长度是 5 的倍数时,它可能会产生多余的“”。 这可以解决问题,并且更有效率和更有条理:

public static String split(String s, int size, String sep) {

    if (s.length() <= size) {
        return s;
    }

    final int expectedLength = s.length() + s.length() / size;

    final StringBuilder sb = new StringBuilder(expectedLength);

    sb.append(s, 0, size);

    int counter = 2 * size;

    while (counter <= s.length()) {
        sb.append(sep).append(s, counter - size, counter);
        counter += size;
    }

    if (counter - size < s.length()) {
        sb.append(sep).append(s, counter - size, s.length());
    }

    return sb.toString();
}

所以你可以打电话:

String s = "VJKUKKASDD";

String out = split(s, 5, " ");

【讨论】:

    【解决方案2】:

    使用String.substring() 并连接。

    String s = "JJGDVKJGFGKKGRFJJF";
    String result="";
    
    for (int i=0;i<s.length;i+=5) {
        if(!result.equals("") result+=" ";
        result+=s.substring(i, Math.max(i+5, s.length));
    }
    

    我正在用手机写信。所以很难写出好的代码。可能有一些错误需要纠正。

    【讨论】:

    • 对java还是有点陌生​​,能否详细说明如何使用String.substring()
    【解决方案3】:

    您可以使用一些变量来跟踪索引位置并使用substring(startIndex, endIndex) 来更新新字符串。我们使用StringBuilder 来创建新的字符串。

    String first = "VJKUKUTGCNNAUVWRKF";
    StringBuilder splittedString = new StringBuilder();
    int length = first.length();
    int index = 0;
        
    while(length > 0){
        int endIndex = index + 5;
        if(length <= 5){
            endIndex = index + length;
        }
            
        splittedString.append(first.substring(index, endIndex));
        splittedString.append(" ");
        length -= 5;
        index += 5;
    }
        
    System.out.println(splittedString.toString().trim());
    

    【讨论】:

      【解决方案4】:

      如果您使用的是 java8 或更高版本:

      String original  = "VJKUKUTGCNNAUVWRKF";
      
      String modifided = Pattern.compile("(?<=\\G.{5})")
                                .splitAsStream(original)
                                .collect(Collectors.joining(" "));
      

      【讨论】:

      • 特别提到的OP使用循环。
      【解决方案5】:

      如果你想使用正则表达式,请参考这个

      Splitting a string at every n-th character

      代码:

          String s = "VJKUKUTGCNNAUVWRKF";
          System.out.println(java.util.Arrays.toString(s.split("(?<=\\G.....)")));
      

      【讨论】:

        【解决方案6】:

        也许

        String str = "VJKUKUTGCNNAUVWRKF";
        StringBuilder sb = new StringBuilder();
        
        for (int j = 1; j <= str.length(); j++) {
                
            sb.append(str.charAt(j-1));
                
            if (j % 5 == 0) {
                sb.append(" ");
            }
        }
        
        String str2 = sb.toString();
        

        我不认为这是一个完美优化的解决方案,但它是一种方式。

        【讨论】:

          猜你喜欢
          • 2011-03-03
          • 2014-12-17
          • 2022-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-14
          • 1970-01-01
          相关资源
          最近更新 更多