我有一个文本文件,想要标记其行 - 但只有#
字符的句子。
例如,给定......
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();
}
}
有人可以帮忙吗?
答案 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]