2016-11-06 167 views
-6

我有一個只包含數字的字符串。字符串本身看起來像這樣「0011112222111000」或「1111111000」。我想知道如何獲得一組只包含一個數字的字符串的子字符串。 例如,如果我有「00011111122233322211111111110000000」字符串,我想它是在字符串數組(string[]),其中包含["000","111111","222","333","222","1111111111","0000000"]將字符串分成幾個子字符串

這是我已經試過

for (int i = (innerHierarchy.length()-1); i >= 1; i--) { 
           Log.e("Point_1", "innerHierarchy " + innerHierarchy.charAt(i)); 
           c = Character.toChars(48 + max); 
           Log.e("Point_1", "c " + c[0]); 
           if (innerHierarchy.charAt(i) < c[0] && innerHierarchy.charAt(i - 1) == c[0]) { 
            Log.e("Point_1", "Start " + string.charAt(i)); 
            o = i; 
           } else if (innerHierarchy.charAt(i) == c[0] && innerHierarchy.charAt(i - 1) < c[0]) { 
            Log.e("Point_1", "End " + string.charAt(i)); 
            o1 = i; 
            string[j] = string.substring(o1,o); 
            j=j+1; 
           } 
          } 

但如果字符串看起來像「111111000」

這個代碼將無法正常工作,謝謝。

+5

涉及循環的幾行代碼會執行。如果您遇到問題,請嘗試使用具體問題回來。 Stackoverflow不是一個編碼機器! – Henry

+1

@Henry如果存在正則表達式解決方案,這將會很有趣。 –

+1

爲什麼每個人都會對此表示低估?這是一個完全合法的問題。 –

回答

2

我有 「00011111122233322211111111110000000」 的字符串,我想要它 在字符串數組(串[]),它包含 [ 「000」, 「111111」, 「222」, 「333」,」 222" , 「1111111111」, 「0000000」]

一個我能想到的,現在的做法(爲O(n)(可能不是最有效的,但會解決你的問題)會遍歷一串數字即(「00011111122233322211111111110000000」在你的情況下)

如果考慮中該位置的char與先前位置的char不同,則將字符串作爲一個字符串並繼續。

(方法)

考慮STR = 「00011111122233322211111111110000000」

//starting from position 1 (ie from 2nd char which is '0') 

    //which is same as prev character (i.e 1st char which is '0') 
     // continue in traversal 
     // now char at pos 2 which is again '0' 
     // keep traversing 
     // but then char at position 3 is 1 
     // so stop here and 
     //make substring till here-1 as one string 
     //so "000" came as one string 
    //continue in same manner. 

代碼

import java.util.*; 

    public class A { 
     public static void main(String []args){ 
    String str = "00011111122233322211111111110000000"; 
    str+='-'; //appended '-' to get last 0000000 as well into answer 
       //otherwise it misses last string which i guess was your problem 
    String one_element =""; 
    int start=0; 

    for(int i=1;i<str.length();i++){ 
     if(str.charAt(i)== str.charAt(i-1)) 
      { 

      } 
     else{ 
      one_element = str.substring(start,i); 
      start = i; 
      System.out.println(one_element);//add one_element into ArrayList if required. 
      } 
     } 
    } 
    } 

我在這裏打印每個元素作爲字符串,如果需要的陣列所有那些你可以簡單地使用array_list並繼續添加one_eleme nt in array_list而不是打印。

+0

我已經添加了我的代碼,看一看 – Steve

+0

是啊..確保,我正在嘗試解決您的問題的代碼,並且還會爲111110000工作,請給我一些時間! – eRaisedToX

+0

@steve檢查我最近的解決方案是否適合您,請隨時提供任何其他幫助。即使你的測試用例如str =「111110000」,它也可以工作 – eRaisedToX