java 字符串分词器

java tokenizer for strings

我有一个文本文件,想标记它的行——但只标记带有 # 字符的句子。

例如,给定...

Buah... Molt bon concert!! #Postconcert #gintonic

...我只想打印 #Postconcert #gintonic

我已经尝试过此代码并进行了一些更改...

public class MyTokenizer {

    /**
     * @param args
     */
    public static void main(String[] args) {
        tokenize("Europe3.txt","allo.txt");
    }

    public static void tokenize(String sFile,String sFileOut) {
        String sLine="", sToken="";
        MyBufferedReaderWriter f = new MyBufferedReaderWriter();
        f.openRFile(sFile);
        MyBufferedReaderWriter fOut = new MyBufferedReaderWriter();
        fOut.openWFile(sFileOut);
        while ((sLine=f.readLine()) != null) {
            //StringTokenizer st = new StringTokenizer(sLine, "#");
            String[] tokens = sLine.split("\#");
            for (String token : tokens)
            {
                fOut.writeLine(token);
                //System.out.println(token);
            }
            /*while (st.hasMoreTokens()) {
                sToken = st.nextToken();
                System.out.println(sToken);
            }*/
        }
        f.closeRFile();
    }
}

有人能帮忙吗?

您可以尝试使用 Regex:

package com.Whosebug.answers;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class HashExtractor {

    public static void main(String[] args) {
        String strInput = "Buah... Molt bon concert!! #Postconcert #gintonic";
        String strPattern = "(?:\s|\A)[##]+([A-Za-z0-9-_]+)";
        Pattern pattern = Pattern.compile(strPattern);
        Matcher matcher = pattern.matcher(strInput);
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
    }
}

根据给定的示例,当使用 split() 函数时,值将像这样存储:

tokens[0]=Buah... Molt bon concert!! 
tokens[1]=Postconcert
tokens[2]=gintonic

所以您只需要跳过第一个值并将“#”(如果您需要在其他字符串中添加)附加到其他字符串值。

希望这对您有所帮助。

你没有特别要求这个,但我假设你试图从你的文本文件中提取所有#hashtags。

为此,正则表达式是你的朋友:

String text = "Buah... Molt bon concert!! #Postconcert #gintonic";
System.out.println(getHashTags(text));

public Collection<String> getHashTags(String text) {
    Pattern pattern = Pattern.compile("(#\w+)");
    Matcher matcher = pattern.matcher(text);
    Set<String> htags = new HashSet();
    while (matcher.find()) {
        htags.add(matcher.group(1));
    }
    return htags;
}

编译这样的模式 #\w+,所有内容都以 # 开头,后跟一个或多个 (+) 单词字符 (\w)。

然后我们必须用 \.

转义 java 的 \

最后将这个表达式放在一个组中,通过用大括号括起来来访问匹配的文本 (#\w+)

对于每个匹配项,将第一个匹配的组添加到集合中htags,最后我们得到一个包含所有主题标签的集合。

[#gintonic, #Postconcert]