1

我试图从用户输入的推文中找到唯一的主题标签。我的兄弟正在帮助我,但他不得不离开。无论如何,所以我有代码来查找输入中使用单词的次数,但我只需要知道使用的不同主题标签的数量。例如,在输入“#one #two blue red #one #greenfour”中,将有 3 个唯一的主题标签,即 #one、#two 和 #green。我无法弄清楚如何编码。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Tweet {


public static void main(String[] args) {
Scanner hashtag = new Scanner( System.in );
System.out.println( "Please enter a line of text" );
String userInput = hashtag.nextLine();

userInput = userInput.toLowerCase();

userInput = userInput.replaceAll( "\\W", " " );     // strip out any non words.
userInput = userInput.replaceAll( "  ", " " );      // strip out any double spaces
                                                    //   created from stripping out non words
                                                    //   in the first place!
String[] tokens = userInput.split( " " );
System.out.println( userInput );

ArrayList< String > tweet = new ArrayList< String >();

tweet.addAll( Arrays.asList( tokens ) );

int count = 0;

for( int i = 0; i < tweet.size(); i++ )
{
    System.out.printf( "%s: ", tweet.get( i ) );
    for( int j = 0; j < tweet.size(); j++ )
    {
        if( tweet.get( i ).equals( tweet.get( j ) ) )
            count++;
        if( tweet.get( i ).equals( tweet.get( j ) ) && count > 1 )
            tweet.remove( j );                      // after having counted at least
    }                                               // one, remove duplicates from List        
    System.out.printf( "%d\n", count );
    count = 0;
}

} }

4

2 回答 2

2

这是您可以使用的一些工作代码。

我删除了您的字符串替换,因为我不确定您为什么要删除非单词字符——您将删除主题标签上的“#”。多个空格不是问题—— split() 只会将它们变成无害的空字符串。

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class HashTags {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please enter a line of text");
        String tweet = scanner.nextLine();
        Set<String> hashtags = getHashtags(tweet);      
        System.out.println(hashtags.toString());
    }

    public static Set<String> getHashtags(String tweet) {
        String[] words = tweet.split(" ");
        Set<String> hashtags = new HashSet<String>();
        for (String word : words) {
            if (word.startsWith("#")) {
                hashtags.add(word);
            }
        }
        return hashtags;
    }
}

这是示例运行的输出:

Please enter a line of text
#one #two blue red #one #green four     #jaja hg
[#one, #two, #jaja, #green]
于 2013-10-07T01:50:51.390 回答
0

使用下面示例中的 HashSet:

HashSet<String> hashTags = new HashSet<String>();
if(word.startsWith("#") && !hashTags.contains(word)){
  hashTag.add(word);
}

处理完后,推文hashTags将包含您看到的所有唯一哈希标签。您可以对其进行迭代以获取它们。

于 2013-10-07T01:13:14.857 回答