2013-03-13 10 views
0

如果我有一個字符串:如何使用整數數組而不是正則表達式在多個位置分割字符串?

String s = "This is a string to test splitting on!"; 

和代表字符串中的索引的整數數組:

int[] indices = {4, 6, 9, 12, 15}; 

是否有可能得到的字符串像數組:

"This", 
" i", 
"s a", 
" st", 
"rin", 
"g to test splitting on!" 

沒有通過呼籲s.substring(indices[i], indices[i+1])(或類似)的指數循環?

不幸的是,索引都是隨意的,所以正則表達式不會有幫助。基本上我想找到一個等效的split(),我可以傳遞整數數組而不是正則表達式。

+4

有沒有。你必須自己寫,但聽起來好像你有足夠的想法去做。 – 2013-03-13 04:23:04

+0

是啊...我希望能有一種方法,已經測試了效率:( – 2013-03-13 04:31:29

+0

'String#substring()'是恆定的時間,你很好, – 2013-03-13 04:56:50

回答

1

試試這個,如果你不希望使用字符串():

import java.util.*; 
public class StringSplitter implements Iterable<String> 
{ 
    private Scanner scanner; 
    private StringBuilder toParse; 
    private int indices[]; 

    public StringSplitter(String toSplit, int... indices) 
    { 
     Arrays.sort(indices); //make sure it is sorted otherwise it won't work properly 
     toParse = new StringBuffer(toSplit); 
     for(int i = 0; i < indices.length; ++i) 
     { 
      toParse.insert(indices[i] + i, "\u0080"); 
     } 
     scanner = new Scanner(toParse.toString()); 
     scanner.useDelimeter("\u0080"); 
     this.indices = indices; 
    } 

    public Iterator<String> iterator() 
    { 
     return scanner; 
    } 
} 

然後使用for-each循環遍歷字符串:

StringSplitter s = new StringSplitter("This is a string to test splitting on!", 4, 6, 9, 12, 15); 
for(String elem : s) 
{ 
    System.out.println(elem); 
} 
相關問題