2017-04-27 229 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

相關問題