用于字符串的java tokenizer

时间:2015-08-21 17:52:26

标签: java regex stringtokenizer

我有一个文本文件,想要标记其行 - 但只有#字符的句子。

例如,给定......

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();
    }
}

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试使用Regex

package com.stackoverflow.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());
        }
    }
}

答案 1 :(得分:0)

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

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

所以你只需要跳过第一个值并附加'#' (如果你需要另一个)到其他字符串值。

希望这会有所帮助。

答案 2 :(得分:0)

您没有特别要求,但我假设您尝试从文本文件中提取所有#hashtags。

要做到这一点,Regex是你的朋友:

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]