2014-12-02 4 views
0

Здравствуйте, у меня есть рабочий код для проверки количества хэштегов, атрибутов и ссылок в программе, но мне нужно проверить, есть ли табуляция или пробел, используемые после хэштегов или атрибутов, чтобы не считать их, и у них были проблемы.Tweet Программа тестирования

import java.util.Scanner; 

class Main { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Please enter a tweet: "); 
     String input = scan.nextLine(); 
     int length = input.length(); 
     int count = 0; 
     int hashtags = 0, attributions = 0, links = 0; 
     char letter; 
     char letter2; 
     if (length > 140) { 
      System.out.println("Excess Characters: " + (length - 140)); 
     } else { 
      while (count < length) { 
       letter = input.charAt(count); 
       if (letter == '#') { 
        if (input.startsWith("#\t", count)) { 

        } else { 
         hashtags++; 
         count++; 
        } 

        if (letter == '@') { 
         if (input.startsWith("@\t", count)) { 
          count++; 
         } else { 
          attributions++; 
          count++; 
         } 
        } 

        if (letter == 'h') { 
         input = input.toLowerCase(); 
         if (input.startsWith("http://", count)) { 
          links++; 
          count++; 
         } else { 
          count++; 
         } 
        } else { 
         count++; 
        } 
       } 
       System.out.println("Length Correct"); 
       System.out.println("Number of Hashtags: " + hashtags); 
       System.out.println("Number of Attributions: " + attributions); 
       System.out.println("Number of Links: " + links); 
      } 
     } 
    } 
} 
+0

Добро пожаловать в StackOverflow! Если ответ полезен, пожалуйста, не забудьте принять его, и если у вас есть дополнительные вопросы, не стесняйтесь использовать комментарии. – Xynariz

ответ

0

Один простой способ:

Вызов Character.isWhitespace(char). (Пример: Character.isWhitespace(input.charAt(count+1))). Очевидно, вам нужно проверить, чтобы хэштег не был последним символом.

Некоторые непрошеный совет:

  • Старайтесь не использовать .startsWith(), потому что ограничивается конкретными персонажами, и вы должны добавить различные if заявление для каждого персонажа вы хотели, чтобы проверить (космос , вкладка и т. д.). Я признаю, что это может не работать во всех случаях, например, в вашем случае .startsWith("http:"). В этом случае .startsWith() все еще могут работать, но и использовать счетчик, чтобы получить индекс: input.substring(count).startsWith("http:") (Документация here)

  • Один вопроса вашего кода в настоящее время сталкивается в том, что проверка пространств всегда идет с начала строки. Для строки ввода #\tabC#def #ghi он отображает 0 хэштегов, поскольку в первом случае он не имеет места, которое он проверяет каждый раз.

  • Если вы постоянно делаете if (letter=='<char>'), вы можете попробовать использовать оператор switch (например, switch(letter)). В Java это работает с символами (или строками, если вы используете Java 8). Это может помочь избежать ошибок при отслеживании размещения кронштейнов и т. Д.