2015-09-15 4 views
3

Я задавался вопросом, почему результат расщепления СтрокаJava Строка расколоть Вопросы

Foo: и: бух

с регулярным выражением

о

имеет пустое место в нем? поэтому выход выглядит так -

п «» и б

Может кто-то объяснить, почему «» здесь? благодаря!

+2

Потому что между 'oo' нет символа. – SubOptimal

ответ

5

Может кто-нибудь объяснить, почему «" находится здесь?

Потому что нет ничего между o и o в foo. Регулярное выражение o разбивается на каждого человека o в строке.

Если вы использовали o+, то вы не имеете "", потому что вы хотите сказать, что "раскол на одном или болееo с":

Live Example

class Example 
{ 
    public static void main(String[] args) 
    { 
     String str = "foo:and:boo"; 
     test("Results from using just \"o\":", str, "o"); 
     test("Results from using \"o+\":",  str, "o+"); 
    } 

    private static void test(String label, String str, String rex) 
    { 
     String[] results = str.split(rex); 
     System.out.println(label); 
     for (String result : results) { 
      System.out.println("[" + result + "]"); 
     } 
    } 
} 

Выход:

 
Results from using just "o": 
[f] 
[] 
[:and:b] 
Results from using "o+": 
[f] 
[:and:b] 
0

Сплит на «о» будет разделен на каждый найденный «о»:

"ok" .split ("o");

Дайте результат:

  1. "" -> индекс 0 (входит в комплект) к индексу 1 (не входит в комплект)
  2. к -> индекс 1 (входит в комплект) для индекса 2 (не входит в комплект)

Потому что индекс 0 соответствует вашему регулярному выражению «o». Но почему foo тоже не возвращается?

Документация раскола говорит:

Скользящий пустые строки, следовательно, не включаются в результирующую массива.

Средство для трейдинга в конце регулярного выражения. Если вы добавите что-то после «boo»: String source = "foo: and: boot"; Строка [] os = источник.сплит ("о");

System.out.println(String.format("Size of result is [%s]", os.length)); 
for (int i = 0; i < os.length; i++) { 
    System.out.println(i + " " + os[i]); 
} 

Выход будет:

Size of result is [5] 
0 f 
1 
2 :and:b 
3 
4 t 
0

Я думаю, вы можете понять это хорошо, если вы знаете, как индекс в регулярных выражениях работ.

Под рисунком копируется из here.

enter image description here

Как вы можете видеть, хотя «Foo» длина составляет всего 3 символов, начинают индекс 0 и индексный является 3.

Теперь, если вы говорите, разделить на «о» (только одно появление o), вы можете видеть, что между ячейками 1 (o) и cell2 (o) нет ничего, поэтому он дает пустую строку. Как упоминалось выше, если вы используете «o +» (одно или несколько вхождений буквы o) для разделения, вы не получите пустую строку. Надеюсь, я поняла.