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]
我有一个文本文件,想标记它的行——但只标记带有 #
字符的句子。
例如,给定...
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
)。
然后我们必须用 \
.
\
最后将这个表达式放在一个组中,通过用大括号括起来来访问匹配的文本 (#\w+)
。
对于每个匹配项,将第一个匹配的组添加到集合中htags
,最后我们得到一个包含所有主题标签的集合。
[#gintonic, #Postconcert]