2012-02-14 36 views
21

Tôi đã cố gắng tìm kiếm trực tuyến để giải quyết câu hỏi này nhưng tôi không tìm thấy bất cứ điều gì.Java: Làm cách nào để chia chuỗi bằng một số ký tự?

Tôi đã viết code trừu tượng sau đây để giải thích những gì tôi đang hỏi:

String text = "how are you?"; 

String[] textArray= text.splitByNumber(4); //this method is what I'm asking 
textArray[0]; //it contains "how " 
textArray[1]; //it contains "are " 
textArray[2]; //it contains "you?" 

Phương pháp splitByNumber tách chuỗi "văn bản" mỗi 4 ký tự. Làm thế nào tôi có thể tạo ra phương pháp này ??

Nhiều Cảm ơn

+0

Ra khỏi tò mò, trường hợp sử dụng của bạn là gì cho việc này? – Marcelo

+0

Có thể trùng lặp với http://stackoverflow.com/questions/2297347/splitting-a-string-at-every-n-th-character –

+0

Bản sao có thể có của [Chia chuỗi thành các chuỗi có độ dài bằng nhau trong Java] (https: // stackoverflow.com/questions/3760152/split-string-to-equal-length-substrings-in-java) – Rumid

Trả lời

43

Tôi nghĩ rằng những gì ông muốn là để có một chuỗi phân chia thành các chất nền có kích thước 4. Sau đó, tôi sẽ làm điều này trong một vòng lặp:

List<String> strings = new ArrayList<String>(); 
int index = 0; 
while (index < text.length()) { 
    strings.add(text.substring(index, Math.min(index + 4,text.length()))); 
    index += 4; 
} 
3

Hãy thử điều này

String text = "how are you?"; 
    String array[] = text.split(" "); 

Hoặc bạn có thể sử dụng nó dưới

List<String> list= new ArrayList<String>(); 
int index = 0; 
while (index<text.length()) { 
    list.add(text.substring(index, Math.min(index+4,text.length())); 
    index=index+4; 
} 
24

Sử dụng Guava:

Iterable<String> result = Splitter.fixedLength(4).split("how are you?"); 
String[] parts = Iterables.toArray(result, String.class); 
2

Tôi không nghĩ rằng có một giải pháp out-of-the-box, nhưng tôi sẽ làm một cái gì đó như này:

private String[] splitByNumber(String s, int chunkSize){ 
    int chunkCount = (s.length()/chunkSize) + (s.length() % chunkSize == 0 ? 0 : 1); 
    String[] returnVal = new String[chunkCount]; 
    for(int i=0;i<chunkCount;i++){ 
     returnVal[i] = s.substring(i*chunkSize, Math.min((i+1)*chunkSize-1, s.length()); 
    } 
    return returnVal; 
} 

Cách sử dụng sẽ là:

String[] textArray = splitByNumber(text, 4); 

EDIT: chuỗi con thực sự không nên vượt qua chiều dài chuỗi.

+0

Ugh, nói s.length() = 9, chunkSize = 4, bạn phân bổ mảng 2, nó phải là 3 – st0le

+0

Bạn nói đúng, tôi đã sửa nó. Không thanh lịch như tôi nghĩ lúc đầu: / – Gilthans

1

Đây là giải pháp đơn giản nhất tôi có thể nghĩ ra .. cố gắng này

public static String[] splitString(String str) { 
    if(str == null) return null; 

    List<String> list = new ArrayList<String>(); 
    for(int i=0;i < str.length();i=i+4){ 
     int endindex = Math.min(i+4,str.length()); 
     list.add(str.substring(i, endindex)); 
    } 
    return list.toArray(new String[list.size()]); 
} 
3

Nhanh Hack

private String[] splitByNumber(String s, int size) { 
    if(s == null || size <= 0) 
     return null; 
    int chunks = s.length()/size + ((s.length() % size > 0) ? 1 : 0); 
    String[] arr = new String[chunks]; 
    for(int i = 0, j = 0, l = s.length(); i < l; i += size, j++) 
     arr[j] = s.substring(i, Math.min(l, i + size)); 
    return arr; 
} 
3

Sử dụng nguyên thủy java đơn giản và vòng lặp.

private static String[] splitByNumber(String text, int number) { 

     int inLength = text.length(); 
     int arLength = inLength/number; 
     int left=inLength%number; 
     if(left>0){++arLength;} 
     String ar[] = new String[arLength]; 
      String tempText=text; 
      for (int x = 0; x < arLength; ++x) { 

       if(tempText.length()>number){ 
       ar[x]=tempText.substring(0, number); 
       tempText=tempText.substring(number); 
       }else{ 
        ar[x]=tempText; 
       } 

      } 


     return ar; 
    } 

Cách sử dụng: String ar[]=splitByNumber("nalaka", 2);

Các vấn đề liên quan