2016-01-25 1 views
1

Строка, которую я хочу разбить, - «Он очень хороший мальчик, не так ли?». Когда я использовал только функцию split, out put также печатал пробел после «boy» в строке. Чтобы удалить это, я поставлю условие if в коде, а затем код ничего не печатает после мальчика.Трудно разобраться в работе функции split в java

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

public class Solution { 


    public static void main(String[] args) 
    { 


     Scanner scan = new Scanner(System.in); 
     String s=scan.nextLine(); 

     String []tokens = s.trim().split("[\\s,'?]"); 
     int n = tokens.length; 
     System.out.println(n); 
     for(int i=0;i<tokens.length;i++) 
     { 
      if(tokens[i].charAt(0)==' ') 
      { 
      continue; 
      } 

      System.out.println(tokens[i]); 
     } 

    } 
} 
+3

Что вы хотите быть выходным? – TejjD

+1

Каков ваш ожидаемый результат? – Satya

+1

Немного странно, чтобы расщепляться на '' ', не так ли? –

ответ

0

Вы говорите split разделить на одного персонажа из этого списка. Если вы хотите, чтобы разделить на один или более (например, пробеги этих символов), добавьте + после того, как сказать «один или более о вещи, прежде чем»:

String []tokens = s.trim().split("[\\s,'?]+"); 
// Here ----------------------------------^ 

Live Example

(FWIW, в том числе ' в списке символов для разметки, кажется немного странным, но мы не знаем ваш случай использования, поэтому ...)

+0

Спасибо, это сработало. Не могли бы вы также рассказать мне, почему цикл for заканчивается в этом коде, как только он печатает мальчика. Это то, что меня больше всего смутило. Я использовал «для разделения, поскольку это было указано в проблеме, которую я пытался решить. –

+0

@AmanKumarSinha: у нее не было бы * закончено *, она бы разбилась с помощью« IndexOutOfBoundsException ». С вашим исходным регулярным выражением запись после '' boy ''' '' '(см. [Эту версию] (http://ideone.com/Oic11e) с вашим исходным регулярным выражением), поэтому' .charAt (0) 'is просить персонажа, которого нет, и терпит неудачу. –

+0

Спасибо. Я попробую прочитать больше о функции split. Я думал, что я также взял место в качестве токена. –

0

проверить это решение.

String str="He is a very very good boy, isn't he?"; 
     String[] Val = str.split("[' ,@!_.?]+"); 
     System.out.println(Val.length); 
     for(String token :Val) { 
       System.out.println(token);}}