【问题标题】:Dividing a string into groups of four将字符串分成四组
【发布时间】:2017-09-24 19:37:26
【问题描述】:

输入是;

"AbrAcadAbRa"

输出应该是;

["AbrA", "brAc", "rAca", "Acad", "cadA", "adAb", "dAbR", "AbRa]

这是我迄今为止尝试过的,但没有成功;

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String str = "AbrAcadAbRa";
    int length = 4;
    String subString = "";
    for (int i = 0; i < length; i++) {
        subString = str.substring(i, length);
        System.out.println(subString);
        str = str.substring(i);
    }
}

输出错误;

["AbrA", "brA", "Ac", "d"]

【问题讨论】:

    标签: java algorithm substring


    【解决方案1】:

    您对字符串进行迭代的逻辑不正确,因此您当前的结果。我在下面使用的逻辑是遍历 输入字符串 的整个长度,减去需要多少空间来确保可以采用适当长度的子字符串。然后,在每次迭代中,打印出一个length 子字符串。

    public static void main(String args[]) {
        String str = "AbrAcadAbRa";
        int length = 4;
        String subString = "";
        // iterate over the length of the input, offset by the substring length
        for (int i = 0; i < str.length()-length+1; i++) {
            subString = str.substring(i, i+length);
            System.out.println(subString);
            // this is wrong; don't modify the original string
            //str = str.substring(i);
        }
    }
    

    输出:

    AbrA
    brAc
    rAca
    Acad
    cadA
    adAb
    dAbR
    AbRa
    

    演示在这里:

    Rextester

    【讨论】:

      【解决方案2】:

      您必须更改您的代码。您必须计算字符串的长度。

      int len = str.length();

      然后从0len-3 开始一个循环,因为您希望每个字符串有 4 位数字。所以你不能去最后一个字母。 我放了示例代码

      public static void main(String[] args) {
          // TODO Auto-generated method stub
          String str = "AbrAcadAbRa";
          int len = str.length();
          int length = 4;
          String subString = "";
          for(int j = 0;j<len-3;j++){
              subString = str.substring(j, j+4);
              System.out.println(subString);
             }
          }
      

      输出

      AbrA
      brAc
      rAca
      Acad
      cadA
      adAb
      dAbR
      AbRa
      

      【讨论】:

      • for 循环的边界不是很理想,因为它们已将所需的子字符串长度硬编码为 4。
      【解决方案3】:

      使用流,您可以执行以下操作:

      public static void main(String[] args) {
          String s = "AbrAcadAbRa";
          int length = 4;
          IntStream.range(0, s.length() - length + 1)
                   .forEach(i -> System.out.println(s.substring(i, i + length)));
      }
      

      它创建一个整数流,直到最后一个 length 字符,然后打印从每个字符开始到 length 的子字符串。

      输出:

      AbrA
      brAc
      rAca
      学院
      cadA
      adAb
      dAbR
      阿布拉

      【讨论】:

        【解决方案4】:

        试试这个,

        import java.util.*;
        import java.lang.*;
        
        class Rextester {
            public static void main(String args[]) {
                String str = "AbrAcadAbRa";
        
                String newstr = str;
                String sub;
                int length = 4;
        
                for (int i=0 ; i<str.length()-3 ; i++){
                    sub = newstr.substring(0, length);
                    newstr = newstr.substring(1, newstr.length());
                    System.out.println(sub);
                }
        
        
            }
        }
        

        【讨论】:

        • 不解释就转储代码是不好的。另外,OP 给了你一个length 参数,使用它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-14
        • 1970-01-01
        相关资源
        最近更新 更多