你好,我有一个工作代码,用于测试程序中的主题标签,属性和链接的数量,但是我需要测试是否在主题标签或属性之后使用了tab键或空格,以便不计算它们并且遇到了麻烦。
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 :(得分: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)。这有助于避免有关支架放置等难以追踪的错误。