2015-04-11 2 views
0

Я пытаюсь отделить слова в предложении. Каждое слово предложения сохраняется в строке word, а затем снова добавляет все обратно в одну строку.Почему я не могу использовать подстроку в этой ситуации?

Но почему я получаю сообщение об ошибке в строке подстроки?

 String sent = IO.readString(); 
     char x; 
     String word =""; 
     int count = 0; 

    for(int i = 0; i < sent.length(); i++){ 
     x = sent.charAt(i); 
      if(x == ' ') 
      { 
      word = sent.substring(x-count,x); 
      word = word + ' '; 
      count =0; 
      } 
    count++; 
} 
+3

Это секрет ошибка? Или вы можете поделиться им с нами, чтобы мы могли вам помочь? Сообщения об ошибках обычно содержат полезную информацию - не скрывайте ее от нас. – ajb

+2

Какая ошибка вы получаете, и с какими входами (то есть, какое значение «отправлено»)? Что вы ожидаете увидеть? Чем больше вы нам дадите, тем легче нам ответить. На самом деле, чем больше вы нам даете, тем больше вероятность того, что вы найдете решение самостоятельно (это полезный навык для создания). – yshavit

ответ

3

word = sent.substring(x-count,x); должен быть word = sent.substring(i-count,i);

+0

Он работает! Спасибо – bri

1

Поскольку x является char, не int, здесь

word = sent.substring(x-count,x); 

и она должна (вероятно) что-то вроде

word = sent.substring(i-count,i); 

потому что i - это позиция в String.

+1

Спасибо за объяснение! – bri

1

Вы должны рассмотреть возможность использования String.split(), который возвращает массив String.

Документация: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)

Чтобы использовать пробелы и знаки препинания в качестве разделителя, вы могли бы сделать что-то вроде этого:

String[] arrWords = sentence.split("([ ,.]+)"); 

Если вы действительно хотите идти с оригинальным маршрутом, вы должны будете добавьте некоторые специальные случаи для первого слова и последнего слова. Хотя, что происходит, когда есть несколько пробелов или пунктуация? Испытайте это и узнайте!

public class SeparateWords 
{ 
    public static void main(String[] args) 
    { 
    String sent ="Hello there how are you"; 
    char x; 
    String word =""; 
    int count = 0; 

    for(int i = 0; i <= sent.length(); i++){ 
     if (i == sent.length()){ 
     word = sent.substring(i-count+1,i); 
     System.out.println(word); 
     break; 
     } 
     x = sent.charAt(i); 

     if(x == ' ') 
     { 
      if ((i-count) == 0){ 
      word = sent.substring(i-count,i); 
      } 
      else{ 
      word = sent.substring(i-count+1,i); 
      } 
      System.out.println(word); 
      word = word + ' '; 

      count =0; 
     } 
     count++; 
    } 

    } 
} 

Выход:

Hello 
there 
how 
are 
you 
+2

Верно, и пример того, почему вы должны * не * идти по этому маршруту и ​​вместо этого использовать существующие, хорошо проверенные классы полезности, такие как ['Scanner'] (http://docs.oracle.com/javase/7/docs/api /java/util/Scanner.html) – duckstep

+0

Спасибо за отзыв String.split()! и спасибо за объяснение остальных. – bri

Смежные вопросы