不检查每个if语句 packagemain; 导入java.util.array; 导入javax.swing.*; 公共类TweetTester{ 公共静态void main(字符串[]args) { String tweet=JOptionPane.showInputDialog(“请输入一条tweet:\n(Hashtags应表示为#Hashtags,而提及应表示为@references)”); int length=tweet.length(); 如果(长度140){ showMessageDialog(null,“多余字符:”+(长度-140)); } } }
首先,您可能应该使用不检查每个if语句 packagemain; 导入java.util.array; 导入javax.swing.*; 公共类TweetTester{ 公共静态void main(字符串[]args) { String tweet=JOptionPane.showInputDialog(“请输入一条tweet:\n(Hashtags应表示为#Hashtags,而提及应表示为@references)”); int length=tweet.length(); 如果(长度140){ showMessageDialog(null,“多余字符:”+(长度-140)); } } },java,if-statement,Java,If Statement,首先,您可能应该使用\\s+regexp: package main; import java.util.Arrays; import javax.swing.*; public class TweetTester { public static void main(String[] args) { String tweet= JOptionPane.showInputDialog("Please enter a tweet:\n(Hashtags shoul
\\s+
regexp:
package main;
import java.util.Arrays;
import javax.swing.*;
public class TweetTester {
public static void main(String[] args)
{
String tweet= JOptionPane.showInputDialog("Please enter a tweet:\n(Hashtags should be represented as #hashtags and mentions should be represented by @mentions)");
int length = tweet.length();
if (length<=140)
{
String[] splited = tweet.split("\\b+"); //split on space
if(Arrays.asList(splited).contains("#"))
{
int index = tweet.indexOf("#");
int count = 0;
while (index != -1)
{
count++;
tweet = tweet.substring(index + 1);
index = tweet.indexOf("#");
}
System.out.println("No of *#* in the input is : " + count);
}
if(Arrays.asList(splited).contains("@"))
{
int index = tweet.indexOf("@");
int count2 = 0;
while (index != -1)
{
count2++;
tweet = tweet.substring(index + 1);
index = tweet.indexOf("@");
}
System.out.println("No of *@* in the input is : " + count2);
}
if(Arrays.asList(splited).contains("http://"))
{
int index = tweet.indexOf("http://");
int count3 = 0;
while (index != -1)
{
count3++;
tweet = tweet.substring(index + 1);
index = tweet.indexOf("http://");
}
System.out.println("No of *http://* in the input is : " + count3);
}
//JOptionPane.showMessageDialog(null, (140 - length)+" Charcters Left\n"+"Tweet:\n"+tweet+"\nLength Correct"+ "number of #:"+count);
}
if (length>140 ){
JOptionPane.showMessageDialog(null,"Excess Characters: "+(length-140));
}
}
}
其次,在每个if(){…}中,您修改(截断)原始tweet字符串并丢失一些数据
例如,当您的tweet等于:
String[] splited = tweet.split("\\s+"); //split on space
您的第一个if()将删除原始tweet字符串的第一部分:
String tweet = "one @ two # # three # four";
第二个if()tweet将不会有任何“@”
字符
上述推文的结果是:
tweet = tweet.substring(index + 1);
你改变推特。这是不需要的,因为有一个String.indexOf(String sequed,int startPos)。 最好还是不要重复你自己:
No of *#* in the input is : 3
No of *@* in the input is : 0
正则表达式“\\b”
用于单词边界,对于http://
来说是有问题的。
事实上,为什么不简单计数,然后测试计数!=0
publicstaticvoidmain(字符串[]args)
{
String tweet=JOptionPane.showInputDialog(“请输入tweet:\n”
+“(Hashtags应表示为#Hashtags,提及的内容应为”
+“由@提及代表)”);
int length=tweet.length();
如果(长度为0){
System.out.println(“输入中的*#*号为:“+count”);
}
计数=计数(tweet,“@”);
如果(计数>0){
System.out.println(“输入中的*@*号为:“+count”);
}
count=count(tweet,“http:/”);
如果(计数>0){
System.out.println(“输入中的*http://*号为:“+count”);
}
}
其他的
{
showMessageDialog(null,“多余字符:”+(长度-140));
}
它不会遍历每个if语句。任何不一致的样式都会使代码不可读且难以理解。这可能就是为什么你不能弄明白。在调试器中运行并单步执行。应该很容易识别。您输入的文本值是什么?好的,没有其他想法,输入是JOptionPane.ShowInputDialog。您确定if块测试的条件为真吗?但是ifs内部是局部变量修改推文而不是全局变量,因此不应该影响推文。在main方法中只有1个推文变量。当您调用:tweet=tweet.substring(…)
时,您会得到一些较短的子字符串,并将此子字符串分配给tweet-因此tweet现在已被修改。如果您希望尽快生效,您可以添加lineString copy=tweet代码>在每个if()的开头。然后只对copy
进行操作-此copy
字符串在if
中是本地字符串。但更好的方法是按照@Joop EggenAlso的建议使用indexOf,而在空格上而不是在单词边界上进行拆分将有助于测试“http://”的效果,它不会一直达到这个目的,并且会破坏对“@”和“#”的(有问题的)测试。这是因为代码使用List.contains(Object)
,它将测试(字符串“@”、“#”和“http://”)的精确匹配,而需要的是使用String.contains(CharSequence)
测试每个列表元素。我将在代码中的什么位置合并它。如果需要,修改原始代码。@JohnBollinger yes“aaa@bbb”将产生“aaa”,“@”(带空格),“bbb”。przemek hertel正确地使用了“\\s+”
@Keeth扩展了答案。在int count=count(tweet,“#”)上获取错误,计数=计数(tweet,“@”),count=count(tweet,“http:/”);
public static int count(String sentence, String word) {
int count = 0;
int oldPos = 0;
for (;;) {
int pos = sentence.indexOf(word, oldPos);
if (pos == -1) {
break;
}
count++;
oldPos = pos + word.length();
}
return count;
}
public static void main(String[] args)
{
String tweet= JOptionPane.showInputDialog("Please enter a tweet:\n"
+ "(Hashtags should be represented as #hashtags and mentions should be "
+ "represented by @mentions)");
int length = tweet.length();
if (length<=140)
{
int count = count(tweet, "#");
if (count > 0) {
System.out.println("No of *#* in the input is : " + count);
}
count = count(tweet, "@");
if (count > 0) {
System.out.println("No of *@* in the input is : " + count);
}
count = count(tweet, "http://");
if (count > 0) {
System.out.println("No of *http://* in the input is : " + count);
}
}
else
{
JOptionPane.showMessageDialog(null,"Excess Characters: " + (length-140));
}