2017-04-27 228 views
0

输入是;将一个字符串分成四组

"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"] 

回答

6

您的迭代字符串的逻辑不正确,因此您的当前结果。我在下面使用的逻辑是遍历输入字符串的整个长度,但是需要留出很多空间来确保可以采用适当长度的子字符串。然后,在每次迭代中,打印出一个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

0

你必须改变你的代码。你必须计算你的字符串的长度。

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 
+1

你的'for'循环的边界不是很理想,因为它们已经硬编码了所需的子字符串长度为4. –

0

有了流,你可以做到以下几点:

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

输出:

阿布拉
布拉奇
RACA
科学院
的cadA
ADAB
dAbR
阿布拉

-1

试试这个,

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); 
     } 


    } 
} 
+0

没有解释的转储代码是不好的。另外,OP给你一个'length'参数,使用它。 – user1803551