不检查每个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现在已被修改。如果您希望尽快生效,您可以添加line
String 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));
    }