【发布时间】:2017-01-10 07:11:32
【问题描述】:
在本作业中,您将编写一个推文测试员。 Twitter 允许用户发送不超过 140 个字符的消息。用户使用@mentions 将推文定向到特定用户,并使用#hashtags 标记推文。用户还可以“转发”其他用户的推文。 在本实验中,您将要求用户输入一条潜在的推文。首先,您将通过检查长度是否小于或等于 140 个字符来检查它是否是有效的推文。 如果推文太长,则打印超过 140 个字符。 如果推文有效打印长度正确,则计算@mentions和#hashtags的数量并使用以下规则确定推文是否为转发: 每个提及都以“@”字符开头,并且后面至少有一个非空格或非制表符。 所有主题标签都以“#”字符开头,并且后面至少有一个非空格或非制表符。 如果该推文在推文文本的任何位置包含字符串“RT:”,则该推文是转推。 Twitter 忽略大小写,因此“RT:”、“rt:”和任何其他可能的大写字母都被视为同一组字符,并且都表示转发。您无需检查“RT:”字符串后面的任何字符。 请记住,转义序列 '\t' 可用于检查制表符。 样品运行 1: 请输入推文: RT:这是#long 推文。一个超长的#link。因此,当@you 编写代码时,它应该忽略所有#hashtags 和@mentions,因为它太长了。它还应该忽略转推字符串。 多余字符:50 样品运行 2: 请输入推文: 这个#tweet 是#short 并且有几个#hashtags。 RT:而且是转推。 长度正确 提及次数:0 标签数量:3 输入是转推。 样品运行 2: 请输入推文: 这个@tweet 是#short 并且有#hashtags 和@mentions # 长度正确 提及次数:2 标签数量:2 输入不是转推。
import java.util.Scanner;
import java.lang.Math;
public class Main{
public static void main(String[] args)
{
Scanner scan = new Scanner (System.in);
int h = 0;
int m = 0;
int count = 0;
char letter;
boolean r = false;
String tweet;
System.out.println("Please enter a tweet:");
tweet = scan.nextLine();
int length = tweet.length();
if (length <= 140)
{
while (count <= length)
{
letter = tweet.charAt(count);
if (letter == '#' &&
tweet.charAt(letter+1) != ' ')
{
h++;
}
if (letter == '@' &&
tweet.charAt(letter+1) != ' ')
{
m++;
}
if ((letter == 'r' || letter == 'R') &&
(tweet.charAt(letter + 1) == 't' || tweet.charAt(letter + 1) == 'T'))
{
r = true;
}
count ++;
}
System.out.println("Length Correct");
System.out.println("Number of Mentions: " + (m));
System.out.println("Number of Hashtags: " + (h));
if (r == true)
{
System.out.println("The input was a retweet.");
}
else if (r==false)
{
System.out.println("The input was not a retweet.");
}
}
if (length > 140)
{
System.out.println("Excess Characters: " + (length - 140));
}
}
}
【问题讨论】:
-
首先,您将使用
while (count <= length)超出您的数组,因此更改为<其次是letter + 1?也许count + 1但最后你会再次超过你的数组 -
这是很多文本的方式,您的代码示例很难看到实际问题。请减少输入,以便更容易为您提供帮助。
-
您是否查看过757 other questions 关于此异常的信息?
标签: java