Как работает String.split? - PullRequest
       7

Как работает String.split?

1 голос
/ 17 ноября 2011

Почему следующий код возвращает вывод ниже?Я ожидаю, что 2 и 3 обеспечивают одинаковое разбиение строк на 1.

    Log.d(TAG, " 1 ---------------------------");
String originalText = "hello. .hello1";

Pattern p = Pattern.compile("[a-zA-Z]+|\\s|\\W|\\d");
Matcher m = p.matcher(originalText);

 while (m.find()) { 
     Log.d(TAG, m.group(0)); 
 }
 Log.d(TAG, "2 --------------------------- " + originalText);

String [] scrollString = p.split(originalText);

int i;      
for (i=0; i<scrollString.length; i++)
    Log.d(TAG, scrollString[i]);

Log.d(TAG, "3 --------------------------- " + originalText);

scrollString = originalText.split("[a-zA-Z]+|\\s|\\W|\\d");


for (i=0; i<scrollString.length; i++)
    Log.d(TAG, scrollString[i]);

ВЫХОД:

1 ---------------------------

hello

.

.

hello

1

2 ---------------------------

3 --------------------------- 

Ответы [ 4 ]

1 голос
/ 17 ноября 2011

Нет. 1 найдет шаблон и вернет его, тогда как № 2 и 3 вернут текст между найденным шаблоном (который в этих случаях служит разделителем).

1 голос
/ 17 ноября 2011

Ваш предмет не соответствует тому, что вы спрашиваете.

Субъект спрашивает о String.split(), что вы делаете Pattern.split(), с кем вам действительно нужна помощь?

При использовании String.split(); вы передаете регулярное выражение для применения к строке, а не к строке, которую хотите разбить!

JavaDoc для String.split ();

final String s = "this is the string I want to split";
final String[] sa = s.split(" ");

вы звоните .split на p ( Pattern.split (); )

Pattern p = Pattern.compile("[a-zA-Z]+|\\s|\\W|\\d");
String [] scrollString = p.split(originalText);

эти методы тоже имеют различное поведение.

0 голосов
/ 17 ноября 2011

Нет.Каждый символ в вашей строке покрыт шаблоном разбиения, поэтому принимается за то, что вы не хотите.Таким образом, вы получаете пустой результат.

Вы можете представить, что ваш шаблон сначала находит «привет», а затем разделяет надежды найти что-то, но, увы!

0 голосов
/ 17 ноября 2011

методы split() не добавляют захваченную часть строки (разделитель) в массив результатов

, если вам нужны разделители, вам придется поиграть с lookahead и lookbehind (или использоватьверсия 1)

...