Преобразование приговора с использованием Java - PullRequest
0 голосов
/ 13 июня 2011

Каков наилучший способ реализации преобразования предложения в java

Например: сегодня понедельник.вчера было воскресенье.вторник наступает после понедельника

вывод будет T oday - понедельник. Y вчера было воскресенье. T вторник наступает после понедельника

Моя логика:

  • Преобразование всего предложения в строчные буквы.

  • Проверьте '.' и преобразуйте первый символ в ЗАГЛАВНЫЕ буквы после '. '

Ответы [ 5 ]

3 голосов
/ 13 июня 2011

Ваша логика выглядит хорошо.Немного больше кода:

  • sentence.split("[\\.?!]") даст вам массив предложений (разделение на знаки препинания
  • включает специальные случаи для таких сокращений, как 5 мин.
  • не переводите в нижний регистр - вы можете потерять заглавные буквы собственных имен
  • Превратить первую букву каждого предложения в верхний регистр (обрезать все пробелы до этого)
1 голос
/ 13 июня 2011

Вот решение для вас:

String input = "today is monday. yesterday was sunday. tuesday comes after monday";
StringBuffer buffy = new StringBuffer(input); // You may want to .toLowerCase() - up to you
Pattern pattern = Pattern.compile("(^|\\.)\\s*(\\w)");
Matcher matcher = pattern.matcher(buffy);
while (matcher.find())
    buffy.replace(matcher.end() - 1, matcher.end(), matcher.group(2).toUpperCase());
System.out.println(buffy); // Today is monday. Yesterday was sunday. Tuesday comes after monday

Регулярное выражение (^|\\.)\\s*(\\w) соответствует либо в начале строки, либо в точке, за которой следует дополнительный пробел, а затем символ слова.

1 голос
/ 13 июня 2011

За исключением сокращений, таких как, например, или вес 3 фунта - они доставят вам неприятности, и не существует отличного способа автоматического определения начала предложений.(примечание: аббревиатуры тоже могут быть собственными именами, например, Нью-Йорк для Нью-Йорка, поэтому нет исчерпывающего списка)

Вам также нужно использовать?а также !в качестве разделителей предложений.

0 голосов
/ 13 июня 2011

Другое решение:

StringBuilder txt = new StringBuilder("today is monday. yetserday was sunday. tuesday comes after monday");
int pos = -1;
do
{
    txt.replace(pos + 1, pos + 2, txt.substring(pos + 1,pos + 2).toUpperCase());
    pos = txt.indexOf(".", pos) + 1;
}
while(pos > 0 && pos < txt.length());
System.out.println(txt.toString());

ВЫВОД:

Today is monday. Yetserday was sunday. Tuesday comes after monday
0 голосов
/ 13 июня 2011

Посмотрите на StringCharacterIterator . Вы выполняете итерацию до тех пор, пока не найдете точку (или другой разделитель), затем ищите следующую букву (возможно, это будут пробелы / символы новой строки, пока не дойдете до нее) и зададите ее в верхнем регистре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...