Количество букв в предложении без учета последнего слова

Я новичок в программировании на Java. Этот фрагмент вычисляет количество букв в каждом слове и сохраняет его в виде строки (исключая пробелы), но он вычисляет только до «большого» и не считает буквы в «контейнере».

class piSong
{
    String pi = "31415926535897932384626433833";
    public void isPiSong(String exp)
    {
        int i,count=0;
        String counter = "";
        String str;
        System.out.println(exp.charAt(25));
        for(i=0;i<exp.length()-1;i++)
        {
            if(Character.isWhitespace(exp.charAt(i)))
            {   str = Integer.toString(count);
                counter += str;
                count = 0;
                continue;
            }
            count++;

        }
        System.out.println(counter);
    }
}
public class isPiSong{
    public static void main(String[] args)
    {
        piSong p = new piSong();
        String exp = "can i have a large container";
        p.isPiSong(exp);
    }
} 

ожидаемый результат: 314157

текущий выход: 31415


person Tanmaya Nanda    schedule 19.07.2015    source источник


Ответы (2)


Есть 2 вещи, которые вы должны исправить.

  1. В вашем цикле for ваше условие i<exp.length()-1. Почему? Вы, очевидно, хотите также включить последний символ (то есть charAt(exp.length() -1)), поэтому ваше условие должно быть либо i <= exp.length() -1, либо i < exp.length().

  2. Ваша логика состоит в том, чтобы подсчитывать буквы всякий раз, когда вы сталкиваетесь с пробелами. Но после подсчета последнего слова у вас нет пробела. Вот почему он не считает последнее слово.

Чтобы исправить, добавьте count к counter после цикла.

// Loop ends here
counter += count;
System.out.println(counter);
person Codebender    schedule 19.07.2015
comment
Большое спасибо .. очень помогло :) - person Tanmaya Nanda; 19.07.2015

String counter = "";
String[] array = exp.split(" ");
for(String s: array){
  counter += Integer.toString(s.length);
}

Вторая строка разбивает строку на массив строк (разбивается с использованием каждого экземпляра пробела в строке). Цикл проходит через каждую отдельную строку в массиве и добавляет ее длину к строке счетчика. Предпочтительно использовать StringBuilder вместо += для добавления к строке.

StringBuilder sb = new StringBuilder();
    String[] array = exp.split(" ");
    for(String s: array){
      sb.append(Integer.toString(s.length));
    }
String counter = sb.toString();

Но оба будут делать то же самое.

person cbender    schedule 19.07.2015