2010-07-28 3 views
2

У меня длинная строка в моей программе Android. Что мне нужно, мне нужно разбить каждое слово этой строки и скопировать каждое слово в новый String Array. Для, например: Если строка «Я сделал андроид программы», а массив строк называется my_array, то каждый индекс должен содержать значения, как:Android String Array Manipulation

my_array[0] = I 
my_array[1] = did 
my_array[2] = Android 
my_array[3] = Program 

часть программы, которую я сделал, выглядит следующим образом:

StringTokenizer st = new StringTokenizer(result,"|"); 
Toast.makeText(appointment.this, st.nextToken(), Toast.LENGTH_SHORT).show(); 
while(st.hasMoreTokens()) 
{ 
String n = (String)st.nextToken(); 
services1[i] = n; 
Toast.makeText(appointment.this, st.nextToken(), Toast.LENGTH_SHORT).show(); 
} 

Может ли один пожалуйста предложить некоторые идеи ..

+1

StringTokenizer устарел на Java 6. –

ответ

9

Почему бы не использовать String.split()?

Вы можете просто сделать

String[] my_array = myStr.split("\\s+"); 
0

Вы можете использовать String.split или андроид TextUtils.split, если вам нужно вернуться [], когда строка для разделения пуста.

Из StringTokenizer API Docs:

StringTokenizer является наследием класс, который сохраняется по причинам совместимости , хотя его использование не рекомендуется в новом коде. Рекомендуется, чтобы кто-либо , ищущий эту функцию, использовал метод разметки String или вместо пакета java.util.regex.

1

Поскольку '|' является особым символом в регулярном выражении, нам нужно избегать его.

for(String token : result.split("\\|")) 
     { 
      Toast.makeText(appointment.this, token, Toast.LENGTH_SHORT).show(); 
     } 
0

Поскольку String является конечным классом, то по умолчанию непреложного, что означает, что вы не можете вносить изменения в строки. Если вы попытаетесь, будет создан новый объект, а не тот же объект, который был изменен. Поэтому, если вы заранее знаете, что вам нужно будет манипулировать String, целесообразно начать с класса StringBuilder. Существует также StringBuffer для обработки потоков. В StringBuilder есть такие методы, как substring():

substring(int start) 
Returns a new String that contains a subsequence of characters currently contained in this character sequence. 

или getChars():

getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 
Characters are copied from this sequence into the destination character array dst. 

или delete():

delete(int start, int end) 
Removes the characters in a substring of this sequence. 

Тогда, если вам действительно нужно, чтобы быть строка в конце концов, использование строковый конструктор (ы)

String(StringBuilder builder) 
Allocates a new string that contains the sequence of characters currently contained in the string builder argument. 

или

String(StringBuffer buffer) 
Allocates a new string that contains the sequence of characters currently contained in the string buffer argument. 

Хотя понять, когда использовать String методы и когда использовать StringBuilder, this link или this может помочь. (StringBuilder пригодится при сохранении в памяти).